Reference Guide  2.5.0
psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata Class Reference
Inheritance diagram for psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata:
Collaboration diagram for psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata:

Public Member Functions

def __init__ (self, operates_on=None, shapes=None, evaluator_targets=None, meta_args=None, meta_funcs=None, meta_ref_element=None, meta_mesh=None, procedure_name=None, name=None)
 
def validate (self)
 
def lower_to_psyir (self)
 
def fortran_string (self)
 
def kernel_type (self)
 
def operates_on (self)
 
def operates_on (self, value)
 
def shapes (self)
 
def shapes (self, values)
 
def evaluator_targets (self)
 
def evaluator_targets (self, values)
 
def meta_args (self)
 
def meta_args (self, values)
 
def meta_funcs (self)
 
def meta_funcs (self, values)
 
def meta_ref_element (self)
 
def meta_ref_element (self, values)
 
def meta_mesh (self)
 
def meta_mesh (self, values)
 
def procedure_name (self)
 
def procedure_name (self, value)
 
def name (self)
 
def name (self, value)
 
def meta_args_get (self, types)
 
def field_meta_args_on_fs (self, arg_types, function_space)
 
def operator_meta_args_on_fs (self, arg_types, function_space)
 

Static Public Member Functions

def create_from_psyir (symbol)
 
def create_from_fparser2 (fparser2_tree)
 

Public Attributes

 procedure_name
 
 name
 
 operates_on
 

Static Public Attributes

 fparser2_class = Fortran2003.Derived_Type_Def
 

Detailed Description

Contains LFRic kernel metadata. This class supports kernel
metadata creation, modification, loading from a fortran string,
writing to a fortran string, raising from existing language-level
PSyIR and lowering to language-level PSyIR.

:param operates_on: the name of the quantity that this kernel is \
    intended to iterate over.
:type operates_on: Optional[str]
:param shapes: if a kernel requires basis or differential-basis \
    functions then the metadata must also specify the set of points on \
    which these functions are required. This information is provided \
    by the gh_shape component of the metadata.
:type shapes: Optional[List[str]]
:param evaluator_targets: the function spaces on which an \
    evaluator is required.
:type evaluator_targets: Optional[List[str]]
:param meta_args: a list of 'meta_arg' objects which capture the \
    metadata values of the kernel arguments.
:type meta_args: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
    CommonArgMetadata`]]
:param meta_funcs: a list of 'meta_func' objects which capture whether \
    quadrature or evaluator data is required for a given function space.
:type meta_funcs: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaFuncsArgMetadata`]]
:param meta_ref_element: a kernel that requires properties \
    of the reference element in LFRic specifies those properties \
    through the meta_reference_element metadata entry.
:type meta_ref_element: Optional[:py:class:`psyclone.domain.lfric.kernel.\
    RefElementArgMetadata`]
:param meta_mesh: a kernel that requires properties of the LFRic \
    mesh object specifies those properties through the meta_mesh \
    metadata entry.
:type meta_mesh: Optional[:py:class:`psyclone.domain.lfric.kernel.\
    MetaMeshArgMetadata`]
:param procedure_name: the name of the kernel procedure to call.
:type procedure_name: Optional[str]
:param name: the name of the symbol to use for the metadata in \
    language-level PSyIR.
:type name: Optional[str]

Definition at line 84 of file lfric_kernel_metadata.py.

Member Function Documentation

◆ create_from_fparser2()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.create_from_fparser2 (   fparser2_tree)
static
Create an instance of this class from an fparser2 tree.

:param fparser2_tree: fparser2 tree containing the metadata \
    for an LFRic Kernel.
:type fparser2_tree: \
    :py:class:`fparser.two.Fortran2003.Derived_Type_Ref`

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

:raises ParseError: if one of the meta_args entries is an \
    unexpected type.
:raises ParseError: if the metadata type does not extend kernel_type.

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

Definition at line 713 of file lfric_kernel_metadata.py.

713  def create_from_fparser2(fparser2_tree):
714  '''Create an instance of this class from an fparser2 tree.
715 
716  :param fparser2_tree: fparser2 tree containing the metadata \
717  for an LFRic Kernel.
718  :type fparser2_tree: \
719  :py:class:`fparser.two.Fortran2003.Derived_Type_Ref`
720 
721  :returns: an instance of LFRicKernelMetadata.
722  :rtype: :py:class:`psyclone.domain.lfric.kernel.psyir.\
723  LFRicKernelMetadata`
724 
725  :raises ParseError: if one of the meta_args entries is an \
726  unexpected type.
727  :raises ParseError: if the metadata type does not extend kernel_type.
728 
729  '''
730  LFRicKernelMetadata.check_fparser2(
731  fparser2_tree, Fortran2003.Derived_Type_Def)
732 
733  kernel_metadata = LFRicKernelMetadata()
734 
735  for fparser2_node in walk(
736  fparser2_tree, Fortran2003.Data_Component_Def_Stmt):
737  fortran_string = str(fparser2_node).lower()
738  # pylint: disable=protected-access
739  if "operates_on" in fortran_string:
740  # the value of operates on (CELL_COLUMN, ...)
741  kernel_metadata._operates_on = OperatesOnMetadata.\
742  create_from_fparser2(fparser2_node)
743  elif "meta_args" in fortran_string:
744  kernel_metadata._meta_args = MetaArgsMetadata.\
745  create_from_fparser2(fparser2_node)
746  elif "meta_funcs" in fortran_string:
747  kernel_metadata._meta_funcs = MetaFuncsMetadata.\
748  create_from_fparser2(fparser2_node)
749  elif "gh_shape" in fortran_string:
750  # the gh_shape values (gh_quadrature_XYoZ, ...)
751  kernel_metadata._shapes = ShapesMetadata.create_from_fparser2(
752  fparser2_node)
753  elif "gh_evaluator_targets" in fortran_string:
754  # the gh_evaluator_targets values (w0, w1, ...)
755  kernel_metadata._evaluator_targets = EvaluatorTargetsMetadata.\
756  create_from_fparser2(fparser2_node)
757  elif "meta_reference_element" in fortran_string:
758  kernel_metadata._meta_ref_element = MetaRefElementMetadata.\
759  create_from_fparser2(fparser2_node)
760  elif "meta_mesh" in fortran_string:
761  kernel_metadata._meta_mesh = MetaMeshMetadata.\
762  create_from_fparser2(fparser2_node)
763  else:
764  raise ParseError(
765  f"Found unexpected metadata declaration "
766  f"'{str(fparser2_node)}' in '{str(fparser2_tree)}'.")
767  # pylint: enable=protected-access
768 
769  kernel_metadata.name = fparser2_tree.children[0].children[1].tostr()
770 
771  attribute_list = fparser2_tree.children[0].children[0]
772  str_attribute_list = str(attribute_list).lower() \
773  if attribute_list else ""
774  if (attribute_list is None or
775  "extends(kernel_type)" not in str_attribute_list):
776  raise ParseError(
777  f"The metadata type declaration should extend kernel_type, "
778  f"but found '{fparser2_tree.children[0]}' in {fparser2_tree}.")
779  kernel_metadata.procedure_name = \
780  LFRicKernelMetadata._get_procedure_name(fparser2_tree)
781 
782  return kernel_metadata
783 
Here is the caller graph for this function:

◆ create_from_psyir()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.create_from_psyir (   symbol)
static
Create a new instance of LFRicKernelMetadata populated with
metadata from a kernel in language-level PSyIR.

:param symbol: the symbol in which the metadata is stored \
    in language-level PSyIR.
:type symbol: :py:class:`psyclone.psyir.symbols.DataTypeSymbol`

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

:raises TypeError: if the symbol argument is not the expected \
    type.
:raises InternalError: if the datatype of the provided symbol \
    is not the expected type.

Definition at line 676 of file lfric_kernel_metadata.py.

676  def create_from_psyir(symbol):
677  '''Create a new instance of LFRicKernelMetadata populated with
678  metadata from a kernel in language-level PSyIR.
679 
680  :param symbol: the symbol in which the metadata is stored \
681  in language-level PSyIR.
682  :type symbol: :py:class:`psyclone.psyir.symbols.DataTypeSymbol`
683 
684  :returns: an instance of LFRicKernelMetadata.
685  :rtype: :py:class:`psyclone.domain.lfric.kernel.psyir.\
686  LFRicKernelMetadata`
687 
688  :raises TypeError: if the symbol argument is not the expected \
689  type.
690  :raises InternalError: if the datatype of the provided symbol \
691  is not the expected type.
692 
693  '''
694  if not isinstance(symbol, DataTypeSymbol):
695  raise TypeError(
696  f"Expected a DataTypeSymbol but found a "
697  f"{type(symbol).__name__}.")
698 
699  datatype = symbol.datatype
700 
701  if not isinstance(datatype, UnsupportedFortranType):
702  raise InternalError(
703  f"Expected kernel metadata to be stored in the PSyIR as "
704  f"an UnsupportedFortranType, but found "
705  f"{type(datatype).__name__}.")
706 
707  # In an UnsupportedFortranType, the declaration is stored as a
708  # string, so use create_from_fortran_string()
709  return LFRicKernelMetadata.create_from_fortran_string(
710  datatype.declaration)
711 

◆ evaluator_targets() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.evaluator_targets (   self)
:returns: a list of evaluator_targets metadata values.
:rtype: Optional[List[str]]

Definition at line 952 of file lfric_kernel_metadata.py.

952  def evaluator_targets(self):
953  '''
954  :returns: a list of evaluator_targets metadata values.
955  :rtype: Optional[List[str]]
956 
957  '''
958  if self._evaluator_targets is None:
959  return None
960  return self._evaluator_targets.evaluator_targets
961 

References psyclone.domain.lfric.kernel.evaluator_targets_metadata.EvaluatorTargetsMetadata._evaluator_targets, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._evaluator_targets.

Here is the caller graph for this function:

◆ evaluator_targets() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.evaluator_targets (   self,
  values 
)
:param values: set the evaluator_targets metadata to the \
    supplied list of values.
:type values: List[str]

Definition at line 963 of file lfric_kernel_metadata.py.

963  def evaluator_targets(self, values):
964  '''
965  :param values: set the evaluator_targets metadata to the \
966  supplied list of values.
967  :type values: List[str]
968 
969  '''
970  self._evaluator_targets = EvaluatorTargetsMetadata(values)
971 

References psyclone.domain.lfric.kernel.evaluator_targets_metadata.EvaluatorTargetsMetadata._evaluator_targets, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._evaluator_targets, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.evaluator_targets().

Here is the call graph for this function:

◆ field_meta_args_on_fs()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.field_meta_args_on_fs (   self,
  arg_types,
  function_space 
)
Utility function to return any field (plus field vector, intergrid
or intergrid vector) meta_args in metadata that have the same
type as those specified in arg_types and are on the function
space specified in function_space.

:param arg_types: meta_arg classes indicating which meta_arg \
    arguments to check.
:type arg_types: \
    :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata` or \
    List[ \
    :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
:param str function_space: the specified function space.

:returns: a list of meta_args.
:type arg_types: List[ \
    :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]

Definition at line 1151 of file lfric_kernel_metadata.py.

1151  def field_meta_args_on_fs(self, arg_types, function_space):
1152  '''Utility function to return any field (plus field vector, intergrid
1153  or intergrid vector) meta_args in metadata that have the same
1154  type as those specified in arg_types and are on the function
1155  space specified in function_space.
1156 
1157  :param arg_types: meta_arg classes indicating which meta_arg \
1158  arguments to check.
1159  :type arg_types: \
1160  :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata` or \
1161  List[ \
1162  :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
1163  :param str function_space: the specified function space.
1164 
1165  :returns: a list of meta_args.
1166  :type arg_types: List[ \
1167  :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
1168 
1169  '''
1170  return [arg for arg in self.meta_args_get(arg_types)
1171  if arg.function_space == function_space]
1172 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args_get().

Here is the call graph for this function:

◆ fortran_string()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.fortran_string (   self)
:returns: the metadata represented by this instance as Fortran.
:rtype: str

:raises ValueError: if the values for name, meta_arg, \
    operates_on and procedure_name have not been set.

Definition at line 841 of file lfric_kernel_metadata.py.

841  def fortran_string(self):
842  '''
843  :returns: the metadata represented by this instance as Fortran.
844  :rtype: str
845 
846  :raises ValueError: if the values for name, meta_arg, \
847  operates_on and procedure_name have not been set.
848 
849  '''
850  if not (self.operates_on and self._meta_args and self.name):
851  raise ValueError(
852  f"Values for operates_on, meta_args and name "
853  f"must be provided before calling the fortran_string method, "
854  f"but found '{self.operates_on}', '{self._meta_args}' "
855  f"and '{self.name}' respectively.")
856 
857  operates_on = f" {self._operates_on.fortran_string()}"
858  meta_args = f" {self._meta_args.fortran_string()}"
859 
860  shapes = ""
861  if self._shapes:
862  shapes = f" {self._shapes.fortran_string()}"
863 
864  evaluator_targets = ""
865  if self._evaluator_targets:
866  evaluator_targets = f" {self._evaluator_targets.fortran_string()}"
867 
868  meta_funcs = ""
869  if self._meta_funcs:
870  meta_funcs = f" {self._meta_funcs.fortran_string()}"
871 
872  meta_ref_element = ""
873  if self._meta_ref_element:
874  meta_ref_element = f" {self._meta_ref_element.fortran_string()}"
875 
876  meta_mesh = ""
877  if self._meta_mesh:
878  meta_mesh = f" {self._meta_mesh.fortran_string()}"
879 
880  # TODO Issue #1946: potentially update the metadata to capture
881  # interface names as well as the interface itself. The
882  # procedure name will then no longer be optional.
883  procedure = ""
884  if self.procedure_name:
885  procedure = (
886  f" CONTAINS\n"
887  f" PROCEDURE, NOPASS :: {self.procedure_name}\n")
888 
889  result = (
890  f"TYPE, PUBLIC, EXTENDS(kernel_type) :: {self.name}\n"
891  f"{meta_args}"
892  f"{meta_funcs}"
893  f"{meta_ref_element}"
894  f"{meta_mesh}"
895  f"{shapes}"
896  f"{evaluator_targets}"
897  f"{operates_on}"
898  f"{procedure}"
899  f"END TYPE {self.name}\n")
900  return result
901 

References psyclone.domain.lfric.kernel.evaluator_targets_metadata.EvaluatorTargetsMetadata._evaluator_targets, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._evaluator_targets, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata._meta_args, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_args, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_funcs, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_mesh, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_ref_element, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._shapes, psyclone.domain.lfric.kernel.shapes_metadata.ShapesMetadata._shapes, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.name, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.GridArg.name, psyclone.domain.gocean.transformations.gocean_const_loop_bounds_trans.GOConstLoopBoundsTrans.name(), psyclone.domain.gocean.transformations.gocean_move_iteration_boundaries_inside_kernel_trans.GOMoveIterationBoundariesInsideKernelTrans.name(), psyclone.domain.gocean.transformations.gocean_opencl_trans.GOOpenCLTrans.name(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.name, psyclone.domain.nemo.transformations.create_nemo_invoke_schedule_trans.CreateNemoInvokeScheduleTrans.name(), psyclone.domain.nemo.transformations.create_nemo_psy_trans.CreateNemoPSyTrans.name(), psyclone.domain.nemo.transformations.nemo_allarrayrange2loop_trans.NemoAllArrayRange2LoopTrans.name(), psyclone.domain.nemo.transformations.nemo_arrayrange2loop_trans.NemoArrayRange2LoopTrans.name(), psyclone.domain.nemo.transformations.nemo_outerarrayrange2loop_trans.NemoOuterArrayRange2LoopTrans.name(), psyclone.dynamo0p3.DynamoPSy.name(), psyclone.expression.FunctionVar.name, psyclone.expression.NamedArg.name(), psyclone.gocean1p0.GOKernelGridArgument.name(), psyclone.gocean1p0.GOStencil.name(), psyclone.parse.algorithm.FileInfo.name(), psyclone.parse.algorithm.InvokeCall.name(), psyclone.parse.kernel.KernelProcedure.name(), psyclone.parse.kernel.KernelType.name(), psyclone.parse.module_info.ModuleInfo.name(), psyclone.psyad.transformations.assignment_trans.AssignmentTrans.name(), psyclone.psyGen.PSy.name(), psyclone.psyGen.Invoke.name(), psyclone.psyGen.Kern.name(), psyclone.psyGen.CodedKern.name, psyclone.psyGen.Argument.name(), psyclone.psyGen.Transformation.name(), psyclone.psyGen.DummyTransformation.name(), psyclone.psyir.nodes.container.Container.name, psyclone.psyir.nodes.member.Member.name, psyclone.psyir.nodes.reference.Reference.name(), psyclone.psyir.nodes.routine.Routine.name, psyclone.psyir.symbols.symbol.Symbol.name(), psyclone.psyir.transformations.allarrayaccess2loop_trans.AllArrayAccess2LoopTrans.name(), psyclone.psyir.transformations.arrayrange2loop_trans.ArrayRange2LoopTrans.name(), psyclone.psyir.transformations.fold_conditional_return_expressions_trans.FoldConditionalReturnExpressionsTrans.name(), psyclone.psyir.transformations.loop_trans.LoopTrans.name(), psyclone.psyir.transformations.omp_task_trans.OMPTaskTrans.name(), psyclone.psyir.transformations.psy_data_trans.PSyDataTrans.name(), psyclone.transformations.OMPSingleTrans.name(), psyclone.transformations.OMPMasterTrans.name(), psyclone.transformations.OMPParallelTrans.name(), psyclone.transformations.MoveTrans.name(), psyclone.transformations.Dynamo0p3AsyncHaloExchangeTrans.name(), psyclone.transformations.Dynamo0p3KernelConstTrans.name(), psyclone.transformations.ACCEnterDataTrans.name(), psyclone.transformations.ACCRoutineTrans.name(), psyclone.transformations.ACCKernelsTrans.name(), psyclone.transformations.ACCDataTrans.name(), psyclone.transformations.KernelImportsToArguments.name(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.operates_on, psyclone.domain.lfric.kernel.operates_on_metadata.OperatesOnMetadata.operates_on, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.procedure_name, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.procedure_name.

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

◆ kernel_type()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.kernel_type (   self)
:returns: the type of kernel that this is.
:rtype: str

Definition at line 903 of file lfric_kernel_metadata.py.

903  def kernel_type(self):
904  '''
905  :returns: the type of kernel that this is.
906  :rtype: str
907  '''
908  return self._get_kernel_type()
909 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._get_kernel_type().

Here is the call graph for this function:

◆ lower_to_psyir()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.lower_to_psyir (   self)
Lower the metadata to language-level PSyIR.

:returns: metadata as stored in language-level PSyIR.
:rtype: :py:class:`psyclone.psyir.symbols.DataTypeSymbol`

Definition at line 784 of file lfric_kernel_metadata.py.

784  def lower_to_psyir(self):
785  '''Lower the metadata to language-level PSyIR.
786 
787  :returns: metadata as stored in language-level PSyIR.
788  :rtype: :py:class:`psyclone.psyir.symbols.DataTypeSymbol`
789 
790  '''
791  return DataTypeSymbol(
792  str(self.name), UnsupportedFortranType(self.fortran_string()))
793 

References psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.fortran_string(), psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.GridArg.fortran_string(), psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.FieldArg.fortran_string(), psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.ScalarArg.fortran_string(), psyclone.domain.lfric.kernel.evaluator_targets_metadata.EvaluatorTargetsMetadata.fortran_string(), psyclone.domain.lfric.kernel.field_arg_metadata.FieldArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.field_vector_arg_metadata.FieldVectorArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.inter_grid_arg_metadata.InterGridArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.inter_grid_vector_arg_metadata.InterGridVectorArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_args_metadata.MetaArgsMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_funcs_arg_metadata.MetaFuncsArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_funcs_metadata.MetaFuncsMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_mesh_arg_metadata.MetaMeshArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_mesh_metadata.MetaMeshMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_ref_element_arg_metadata.MetaRefElementArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.meta_ref_element_metadata.MetaRefElementMetadata.fortran_string(), psyclone.domain.lfric.kernel.operates_on_metadata.OperatesOnMetadata.fortran_string(), psyclone.domain.lfric.kernel.operator_arg_metadata.OperatorArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.scalar_arg_metadata.ScalarArgMetadata.fortran_string(), psyclone.domain.lfric.kernel.shapes_metadata.ShapesMetadata.fortran_string(), psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.name, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.GridArg.name, psyclone.domain.gocean.transformations.gocean_const_loop_bounds_trans.GOConstLoopBoundsTrans.name(), psyclone.domain.gocean.transformations.gocean_move_iteration_boundaries_inside_kernel_trans.GOMoveIterationBoundariesInsideKernelTrans.name(), psyclone.domain.gocean.transformations.gocean_opencl_trans.GOOpenCLTrans.name(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.name, psyclone.domain.nemo.transformations.create_nemo_invoke_schedule_trans.CreateNemoInvokeScheduleTrans.name(), psyclone.domain.nemo.transformations.create_nemo_psy_trans.CreateNemoPSyTrans.name(), psyclone.domain.nemo.transformations.nemo_allarrayrange2loop_trans.NemoAllArrayRange2LoopTrans.name(), psyclone.domain.nemo.transformations.nemo_arrayrange2loop_trans.NemoArrayRange2LoopTrans.name(), psyclone.domain.nemo.transformations.nemo_outerarrayrange2loop_trans.NemoOuterArrayRange2LoopTrans.name(), psyclone.dynamo0p3.DynamoPSy.name(), psyclone.expression.FunctionVar.name, psyclone.expression.NamedArg.name(), psyclone.gocean1p0.GOKernelGridArgument.name(), psyclone.gocean1p0.GOStencil.name(), psyclone.parse.algorithm.FileInfo.name(), psyclone.parse.algorithm.InvokeCall.name(), psyclone.parse.kernel.KernelProcedure.name(), psyclone.parse.kernel.KernelType.name(), psyclone.parse.module_info.ModuleInfo.name(), psyclone.psyad.transformations.assignment_trans.AssignmentTrans.name(), psyclone.psyGen.PSy.name(), psyclone.psyGen.Invoke.name(), psyclone.psyGen.Kern.name(), psyclone.psyGen.CodedKern.name, psyclone.psyGen.Argument.name(), psyclone.psyGen.Transformation.name(), psyclone.psyGen.DummyTransformation.name(), psyclone.psyir.nodes.container.Container.name, psyclone.psyir.nodes.member.Member.name, psyclone.psyir.nodes.reference.Reference.name(), psyclone.psyir.nodes.routine.Routine.name, psyclone.psyir.symbols.symbol.Symbol.name(), psyclone.psyir.transformations.allarrayaccess2loop_trans.AllArrayAccess2LoopTrans.name(), psyclone.psyir.transformations.arrayrange2loop_trans.ArrayRange2LoopTrans.name(), psyclone.psyir.transformations.fold_conditional_return_expressions_trans.FoldConditionalReturnExpressionsTrans.name(), psyclone.psyir.transformations.loop_trans.LoopTrans.name(), psyclone.psyir.transformations.omp_task_trans.OMPTaskTrans.name(), psyclone.psyir.transformations.psy_data_trans.PSyDataTrans.name(), psyclone.transformations.OMPSingleTrans.name(), psyclone.transformations.OMPMasterTrans.name(), psyclone.transformations.OMPParallelTrans.name(), psyclone.transformations.MoveTrans.name(), psyclone.transformations.Dynamo0p3AsyncHaloExchangeTrans.name(), psyclone.transformations.Dynamo0p3KernelConstTrans.name(), psyclone.transformations.ACCEnterDataTrans.name(), psyclone.transformations.ACCRoutineTrans.name(), psyclone.transformations.ACCKernelsTrans.name(), psyclone.transformations.ACCDataTrans.name(), and psyclone.transformations.KernelImportsToArguments.name().

Here is the call graph for this function:

◆ meta_args() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args (   self)
:returns: a list of 'meta_arg' objects which capture the \
    metadata values of the kernel arguments.
:rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
    CommonArg`]]

Definition at line 973 of file lfric_kernel_metadata.py.

973  def meta_args(self):
974  '''
975  :returns: a list of 'meta_arg' objects which capture the \
976  metadata values of the kernel arguments.
977  :rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
978  CommonArg`]]
979 
980  '''
981  if self._meta_args is None:
982  return None
983  return self._meta_args.meta_args_args
984 

References psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata._meta_args, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_args.

Here is the caller graph for this function:

◆ meta_args() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_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 986 of file lfric_kernel_metadata.py.

986  def meta_args(self, values):
987  '''
988  :param values: set the meta_args metadata to the \
989  supplied list of values.
990  :type values: List[:py:class:`psyclone.domain.lfric.kernel.\
991  CommonArg`]
992 
993  '''
994  self._meta_args = MetaArgsMetadata(values)
995 

References psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata._meta_args, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_args, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args().

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

◆ meta_args_get()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args_get (   self,
  types 
)
Return a list of meta_args entries with names that match the
'types' argument.

:param types: a meta_arg type or list of meta_arg types.
:type names: :py:class:`psyclone.domain.lfric.kernel.\
    CommonMetaArgMetadata` or List[:py:class:`psyclone.domain.\
    lfric.kernel.CommonMetaArgMetadata`]

:returns: a list of meta_args entries.
:rtype: List[
    py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]

:raises TypeError: if the types argument is not of the correct type.

Definition at line 1113 of file lfric_kernel_metadata.py.

1113  def meta_args_get(self, types):
1114  '''Return a list of meta_args entries with names that match the
1115  'types' argument.
1116 
1117  :param types: a meta_arg type or list of meta_arg types.
1118  :type names: :py:class:`psyclone.domain.lfric.kernel.\
1119  CommonMetaArgMetadata` or List[:py:class:`psyclone.domain.\
1120  lfric.kernel.CommonMetaArgMetadata`]
1121 
1122  :returns: a list of meta_args entries.
1123  :rtype: List[
1124  py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
1125 
1126  :raises TypeError: if the types argument is not of the correct type.
1127 
1128  '''
1129  if not (isinstance(types, list) or
1130  (inspect.isclass(types) and
1131  issubclass(types, CommonMetaArgMetadata))):
1132  raise TypeError(
1133  f"Expected a subclass of CommonMetaArgMetadata or a list for "
1134  f"the 'types' argument, but found '{type(types).__name__}'.")
1135  if isinstance(types, list):
1136  my_types = types
1137  else:
1138  my_types = [types]
1139  for my_type in my_types:
1140  if not (inspect.isclass(my_type) and
1141  issubclass(my_type, CommonMetaArgMetadata)):
1142  raise TypeError(
1143  f"Expected list entries in the 'types' argument to be "
1144  f"subclasses of CommonMetaArgMetadata, but found "
1145  f"'{type(my_type).__name__}'.")
1146  if not self.meta_args:
1147  return []
1148  return [meta_arg for meta_arg in self.meta_args
1149  if type(meta_arg) in my_types]
1150 

References psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.meta_args(), and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args().

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

◆ meta_funcs() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_funcs (   self)
:returns: a list of meta_funcs metadata values.
:rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaFuncsArgMetadata`]]

Definition at line 997 of file lfric_kernel_metadata.py.

997  def meta_funcs(self):
998  '''
999  :returns: a list of meta_funcs metadata values.
1000  :rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
1001  MetaFuncsArgMetadata`]]
1002 
1003  '''
1004  if self._meta_funcs is None:
1005  return None
1006  return self._meta_funcs.meta_funcs_args
1007 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_funcs.

Here is the caller graph for this function:

◆ meta_funcs() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_funcs (   self,
  values 
)
:param values: set the meta_funcs metadata to the \
    supplied list of values.
:type values: List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaFuncsArgMetadata`]

Definition at line 1009 of file lfric_kernel_metadata.py.

1009  def meta_funcs(self, values):
1010  '''
1011  :param values: set the meta_funcs metadata to the \
1012  supplied list of values.
1013  :type values: List[:py:class:`psyclone.domain.lfric.kernel.\
1014  MetaFuncsArgMetadata`]
1015 
1016  '''
1017  self._meta_funcs = MetaFuncsMetadata(values)
1018 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_funcs, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_funcs().

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

◆ meta_mesh() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_mesh (   self)
:returns: a list of meta_mesh metadata values.
:rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaMeshArgMetadata`]]

Definition at line 1043 of file lfric_kernel_metadata.py.

1043  def meta_mesh(self):
1044  '''
1045  :returns: a list of meta_mesh metadata values.
1046  :rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
1047  MetaMeshArgMetadata`]]
1048 
1049  '''
1050  if self._meta_mesh is None:
1051  return None
1052  return self._meta_mesh.meta_mesh_args
1053 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_mesh.

Here is the caller graph for this function:

◆ meta_mesh() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_mesh (   self,
  values 
)
:param values: set the meta_mesh metadata to the \
    supplied list of values.
:type values: List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaMeshArgMetadata`]

Definition at line 1055 of file lfric_kernel_metadata.py.

1055  def meta_mesh(self, values):
1056  '''
1057  :param values: set the meta_mesh metadata to the \
1058  supplied list of values.
1059  :type values: List[:py:class:`psyclone.domain.lfric.kernel.\
1060  MetaMeshArgMetadata`]
1061 
1062  '''
1063  self._meta_mesh = MetaMeshMetadata(values)
1064 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_mesh, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_mesh().

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

◆ meta_ref_element() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_ref_element (   self)
:returns: a list of meta_reference_element metadata values.
:rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaRefElementArgMetadata`]]

Definition at line 1020 of file lfric_kernel_metadata.py.

1020  def meta_ref_element(self):
1021  '''
1022  :returns: a list of meta_reference_element metadata values.
1023  :rtype: Optional[List[:py:class:`psyclone.domain.lfric.kernel.\
1024  MetaRefElementArgMetadata`]]
1025 
1026  '''
1027  if self._meta_ref_element is None:
1028  return None
1029  return self._meta_ref_element.meta_ref_element_args
1030 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_ref_element.

Here is the caller graph for this function:

◆ meta_ref_element() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_ref_element (   self,
  values 
)
:param values: set the meta_funcs metadata to the \
    supplied list of values.
:type values: List[:py:class:`psyclone.domain.lfric.kernel.\
    MetaRefElementArgMetadata`]

Definition at line 1032 of file lfric_kernel_metadata.py.

1032  def meta_ref_element(self, values):
1033  '''
1034  :param values: set the meta_funcs metadata to the \
1035  supplied list of values.
1036  :type values: List[:py:class:`psyclone.domain.lfric.kernel.\
1037  MetaRefElementArgMetadata`]
1038 
1039  '''
1040  self._meta_ref_element = MetaRefElementMetadata(values)
1041 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._meta_ref_element, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_ref_element().

Here is the call graph for this function:

◆ name() [1/2]

◆ name() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.name (   self,
  value 
)
:param str value: set the name of the symbol that will contain \
    the metadata when lowering.

:raises ValueError: if the name is not valid.

Definition at line 1102 of file lfric_kernel_metadata.py.

1102  def name(self, value):
1103  '''
1104  :param str value: set the name of the symbol that will contain \
1105  the metadata when lowering.
1106 
1107  :raises ValueError: if the name is not valid.
1108 
1109  '''
1110  FortranReader.validate_name(value)
1111  self._name = value
1112 

References psyclone.domain.common.algorithm.psyir.AlgorithmInvokeCall._name, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata._name, psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.GridArg._name, psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._name, psyclone.dynamo0p3.DynFuncDescriptor03._name, psyclone.expression.NamedArg._name, psyclone.gocean1p0.GOKernelGridArgument._name, psyclone.gocean1p0.GOStencil._name, psyclone.nemo.NemoInvoke._name, psyclone.nemo.NemoPSy._name, psyclone.parse.algorithm.FileInfo._name, psyclone.parse.algorithm.InvokeCall._name, psyclone.parse.kernel.KernelProcedure._name, psyclone.parse.kernel.KernelType._name, psyclone.parse.module_info.ModuleInfo._name, psyclone.psyGen.PSy._name, psyclone.psyGen.Invoke._name, psyclone.psyGen.Kern._name, psyclone.psyGen.Argument._name, psyclone.psyir.nodes.container.Container._name, psyclone.psyir.nodes.routine.Routine._name, and psyclone.psyir.symbols.symbol.Symbol._name.

Here is the caller graph for this function:

◆ operates_on() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.operates_on (   self)
:returns: the kernel operates_on property specified by the \
    metadata.
:rtype: str

Definition at line 911 of file lfric_kernel_metadata.py.

911  def operates_on(self):
912  '''
913  :returns: the kernel operates_on property specified by the \
914  metadata.
915  :rtype: str
916  '''
917  if self._operates_on is None:
918  return None
919  return self._operates_on.operates_on
920 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._operates_on, and psyclone.domain.lfric.kernel.operates_on_metadata.OperatesOnMetadata._operates_on.

Here is the caller graph for this function:

◆ operates_on() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.operates_on (   self,
  value 
)
:param str value: set the kernel operates_on property \
    in the metadata to the specified value.

Definition at line 922 of file lfric_kernel_metadata.py.

922  def operates_on(self, value):
923  '''
924  :param str value: set the kernel operates_on property \
925  in the metadata to the specified value.
926 
927  '''
928  self._operates_on = OperatesOnMetadata(value)
929 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._operates_on, and psyclone.domain.lfric.kernel.operates_on_metadata.OperatesOnMetadata._operates_on.

Here is the caller graph for this function:

◆ operator_meta_args_on_fs()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.operator_meta_args_on_fs (   self,
  arg_types,
  function_space 
)
Utility function to return any operator meta_args in metadata that
have the same type as those specified in arg_types and their
from or to function spaces are the same as the function space
specified in function_space.

:param arg_types: meta_arg classes indicating which meta_arg \
    arguments to check.
:type arg_types: \
    :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata` or \
    List[ \
    :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
:param str function_space: the specified function space.

:returns: a list of meta_args.
:type arg_types: List[ \
    :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]

Definition at line 1173 of file lfric_kernel_metadata.py.

1173  def operator_meta_args_on_fs(self, arg_types, function_space):
1174  '''Utility function to return any operator meta_args in metadata that
1175  have the same type as those specified in arg_types and their
1176  from or to function spaces are the same as the function space
1177  specified in function_space.
1178 
1179  :param arg_types: meta_arg classes indicating which meta_arg \
1180  arguments to check.
1181  :type arg_types: \
1182  :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata` or \
1183  List[ \
1184  :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
1185  :param str function_space: the specified function space.
1186 
1187  :returns: a list of meta_args.
1188  :type arg_types: List[ \
1189  :py:class:`psyclone.domain.lfric.kernel.CommonMetaArgMetadata`]
1190 
1191  '''
1192  return [arg for arg in self.meta_args_get(arg_types)
1193  if function_space in [arg.function_space_to,
1194  arg.function_space_from]]
1195 
1196 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args_get().

Here is the call graph for this function:

◆ procedure_name() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.procedure_name (   self)
:returns: the kernel procedure name specified by the metadata.
:rtype: str

Definition at line 1066 of file lfric_kernel_metadata.py.

1066  def procedure_name(self):
1067  '''
1068  :returns: the kernel procedure name specified by the metadata.
1069  :rtype: str
1070  '''
1071  return self._procedure_name
1072 

References psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata._procedure_name, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._procedure_name.

Here is the caller graph for this function:

◆ procedure_name() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.procedure_name (   self,
  value 
)
:param Optional[str] value: set the kernel procedure name in the \
    metadata to the specified value.

:raises ValueError: if the metadata has an invalid value.

Definition at line 1074 of file lfric_kernel_metadata.py.

1074  def procedure_name(self, value):
1075  '''
1076  :param Optional[str] value: set the kernel procedure name in the \
1077  metadata to the specified value.
1078 
1079  :raises ValueError: if the metadata has an invalid value.
1080 
1081  '''
1082  if value:
1083  try:
1084  FortranReader.validate_name(value)
1085  except (ValueError, TypeError) as err:
1086  raise ValueError(
1087  f"Expected procedure_name to be a valid Fortran name but "
1088  f"found '{value}'.") from err
1089  self._procedure_name = value
1090 

References psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata._procedure_name, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._procedure_name.

Here is the caller graph for this function:

◆ shapes() [1/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.shapes (   self)
:returns: a list of shape metadata values.
:rtype: Optional[List[str]]

Definition at line 931 of file lfric_kernel_metadata.py.

931  def shapes(self):
932  '''
933  :returns: a list of shape metadata values.
934  :rtype: Optional[List[str]]
935 
936  '''
937  if self._shapes is None:
938  return None
939  return self._shapes.shapes
940 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._shapes, and psyclone.domain.lfric.kernel.shapes_metadata.ShapesMetadata._shapes.

Here is the caller graph for this function:

◆ shapes() [2/2]

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.shapes (   self,
  values 
)
:param values: set the shape metadata to the \
    supplied list of values.
:type values: List[str]

Definition at line 942 of file lfric_kernel_metadata.py.

942  def shapes(self, values):
943  '''
944  :param values: set the shape metadata to the \
945  supplied list of values.
946  :type values: List[str]
947 
948  '''
949  self._shapes = ShapesMetadata(values)
950 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._shapes, psyclone.domain.lfric.kernel.shapes_metadata.ShapesMetadata._shapes, and psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.shapes().

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

◆ validate()

def psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.validate (   self)
Only certain metadata combinations are allowed in LFRic. This
routine checks that any such constraints are respected.

:raises ParseError: if any validation checks fail.

Definition at line 184 of file lfric_kernel_metadata.py.

184  def validate(self):
185  '''Only certain metadata combinations are allowed in LFRic. This
186  routine checks that any such constraints are respected.
187 
188  :raises ParseError: if any validation checks fail.
189 
190  '''
191  # The _get_kernel_type method returns the type of kernel that
192  # this metadata specifies (e.g. inter-grid or domain). In the
193  # process it checks that the combined metadata conforms to the
194  # constraints of the supported kernel types.
195  _ = self._get_kernel_type()
196 
197  # TODO issue #1953: Checks that are not associated with
198  # determining kernel type
199  # - A kernel must modify at least one of its arguments
200  # - Function spaces of basis functions exist in meta_args
201  # - No shape if no basis or diff basis. shape
202  # if quadrature or evaluator
203  # - evaluator_targets only if required
204  # - evaluator_targets function spaces exist
205  # - Disallow duplicate metadata in meta_args,
206  # meta_funcs etc. lists
207  # - Writing to read-only function spaces (Check within
208  # meta_arg classes?)
209 

References psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._cma_kernel_type(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._get_kernel_type(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_cma_apply_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_cma_assembly_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_cma_matrix_matrix_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_domain_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_general_purpose_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_generic_cma_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_generic_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validate_intergrid_kernel(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata._validation_error_str(), psyclone.domain.gocean.kernel.psyir.GOceanKernelMetadata.meta_args(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_args_get(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_funcs(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.meta_mesh(), psyclone.domain.lfric.kernel.lfric_kernel_metadata.LFRicKernelMetadata.operates_on, and psyclone.domain.lfric.kernel.operates_on_metadata.OperatesOnMetadata.operates_on.

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

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