Reference Guide  2.5.0
psyclone.gocean1p0.GOACCEnterDataDirective Class Reference
Inheritance diagram for psyclone.gocean1p0.GOACCEnterDataDirective:
Collaboration diagram for psyclone.gocean1p0.GOACCEnterDataDirective:

Public Member Functions

def lower_to_language_level (self)
 

Detailed Description

Sub-classes ACCEnterDataDirective to provide the dl_esm_inf infrastructure-
specific interfaces to flag and update when data is on a device.

Definition at line 2133 of file gocean1p0.py.

Member Function Documentation

◆ lower_to_language_level()

def psyclone.gocean1p0.GOACCEnterDataDirective.lower_to_language_level (   self)
In-place replacement of DSL or high-level concepts into generic PSyIR
constructs. In addition to calling this method in the base class, the
GOACCEnterDataDirective sets up the 'data_on_device' flag for
each of the fields accessed.

:returns: the lowered version of this node.
:rtype: :py:class:`psyclone.psyir.node.Node`

Definition at line 2191 of file gocean1p0.py.

2191  def lower_to_language_level(self):
2192  '''
2193  In-place replacement of DSL or high-level concepts into generic PSyIR
2194  constructs. In addition to calling this method in the base class, the
2195  GOACCEnterDataDirective sets up the 'data_on_device' flag for
2196  each of the fields accessed.
2197 
2198  :returns: the lowered version of this node.
2199  :rtype: :py:class:`psyclone.psyir.node.Node`
2200 
2201  '''
2202  self._acc_dirs = self.ancestor(InvokeSchedule).walk(
2203  (ACCParallelDirective, ACCKernelsDirective))
2204  obj_list = []
2205  for pdir in self._acc_dirs:
2206  for var in pdir.fields:
2207  if var not in obj_list:
2208  obj_list.append(var)
2209 
2210  read_routine_symbol = self._read_from_device_routine()
2211 
2212  for var in obj_list:
2213  symbol = self.scope.symbol_table.lookup(var)
2214  assignment = Assignment.create(
2215  StructureReference.create(symbol, ['data_on_device']),
2216  Literal("true", BOOLEAN_TYPE))
2217  self.parent.children.insert(self.position, assignment)
2218 
2219  # Use a CodeBlock to encode a Fortran pointer assignment
2220  reader = FortranReader()
2221  codeblock = reader.psyir_from_statement(
2222  f"{symbol.name}%read_from_device_f => "
2223  f"{read_routine_symbol.name}\n",
2224  self.scope.symbol_table)
2225 
2226  self.parent.children.insert(self.position, codeblock)
2227 
2228  return super().lower_to_language_level()
2229 
2230 

References psyclone.gocean1p0.GOACCEnterDataDirective._acc_dirs, psyclone.psyir.nodes.acc_directives.ACCEnterDataDirective._acc_dirs, psyclone.gocean1p0.GOACCEnterDataDirective._read_from_device_routine(), psyclone.psyir.nodes.node.Node.ancestor(), psyclone.f2pygen.BaseGen.parent(), psyclone.psyir.nodes.node.Node.parent(), psyclone.f2pygen.Directive.position(), psyclone.psyir.nodes.node.Node.position, psyclone.psyir.nodes.node.Node.scope(), and psyclone.psyir.symbols.symbol_table.SymbolTable.scope().

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: