C Code Generation#

parcels.compilation.codegenerator module#

class parcels.compilation.codegenerator.IntrinsicTransformer(fieldset=None, ptype=<class 'parcels.particle.JITParticle'>)[source]#

Bases: NodeTransformer

AST transformer that catches any mention of intrinsic variable names, such as ‘particle’ or ‘fieldset’, inserts placeholder objects and propagates attribute access.

Methods

generic_visit(node)

Called if no explicit visitor function exists for a node.

get_tmp()

Create a new temporary variable name.

visit(node)

Visit a node.

visit_Name(node)

Inject IntrinsicNode objects into the tree according to keyword.

visit_Assign

visit_Attribute

visit_AugAssign

visit_Call

visit_Constant

visit_Subscript

get_tmp()[source]#

Create a new temporary variable name.

visit_Name(node)[source]#

Inject IntrinsicNode objects into the tree according to keyword.

class parcels.compilation.codegenerator.KernelGenerator(fieldset=None, ptype=<class 'parcels.particle.JITParticle'>)[source]#

Bases: ABC, NodeVisitor

Code generator class that translates simple Python kernel functions into C functions.

Works by populating and accessing the ccode attribute on nodes in the Python AST.

Methods

generic_visit(node)

Called if no explicit visitor function exists for a node.

visit(node)

Visit a node.

visit_Call(node)

Generate C code for simple C-style function calls.

visit_FieldNode(node)

Record intrinsic fields used in kernel.

visit_Name(node)

Catches any mention of intrinsic variable names such as 'particle' or 'fieldset' and inserts our placeholder objects.

visit_NestedFieldNode(node)

Record intrinsic fields used in kernel.

visit_NestedVectorFieldNode(node)

Record intrinsic fields used in kernel.

visit_VectorFieldNode(node)

Record intrinsic fields used in kernel.

generate

visit_Add

visit_And

visit_Assign

visit_AugAssign

visit_BinOp

visit_BoolOp

visit_Break

visit_Compare

visit_ConstNode

visit_Constant

visit_Div

visit_Eq

visit_Expr

visit_FieldEvalNode

visit_For

visit_FunctionDef

visit_Gt

visit_GtE

visit_If

visit_Index

visit_List

visit_Lt

visit_LtE

visit_Mod

visit_Mult

visit_NameConstant

visit_NestedFieldEvalNode

visit_NestedVectorFieldEvalNode

visit_Not

visit_NotEq

visit_Or

visit_Pass

visit_Pow

visit_Print

visit_Return

visit_Sub

visit_Subscript

visit_Tuple

visit_UAdd

visit_USub

visit_UnaryOp

visit_VectorFieldEvalNode

visit_While

visit_Call(node)[source]#

Generate C code for simple C-style function calls.

Please note that starred and keyword arguments are currently not supported.

visit_FieldNode(node)[source]#

Record intrinsic fields used in kernel.

visit_Name(node)[source]#

Catches any mention of intrinsic variable names such as ‘particle’ or ‘fieldset’ and inserts our placeholder objects.

visit_NestedFieldNode(node)[source]#

Record intrinsic fields used in kernel.

visit_NestedVectorFieldNode(node)[source]#

Record intrinsic fields used in kernel.

visit_VectorFieldNode(node)[source]#

Record intrinsic fields used in kernel.

class parcels.compilation.codegenerator.LoopGenerator(fieldset, ptype=None)[source]#

Bases: object

Code generator class that adds type definitions and the outer loop around kernel functions to generate compilable C code.

Methods

generate

class parcels.compilation.codegenerator.TupleSplitter[source]#

Bases: NodeTransformer

AST transformer that detects and splits Pythonic tuple assignments into multiple statements for conversion to C.

Methods

generic_visit(node)

Called if no explicit visitor function exists for a node.

visit(node)

Visit a node.

visit_Assign

visit_Constant

parcels.compilation.codecompiler module#

class parcels.compilation.codecompiler.CCompiler(cc=None, cppargs=None, ldargs=None, incdirs=None, libdirs=None, libs=None, tmp_dir='/home/docs/checkouts/readthedocs.org/user_builds/parcels/checkouts/latest/docs')[source]#

Bases: object

A compiler object for creating and loading shared libraries.

Parameters
  • cc – C compiler executable (uses environment variable CC if not provided).

  • cppargs – A list of arguments to the C compiler (optional).

  • ldargs – A list of arguments to the linker (optional).

Methods

compile

class parcels.compilation.codecompiler.CCompiler_SS(cc=None, cppargs=None, ldargs=None, incdirs=None, libdirs=None, libs=None, tmp_dir='/home/docs/checkouts/readthedocs.org/user_builds/parcels/checkouts/latest/docs')[source]#

Bases: CCompiler

Single-stage C-compiler; used for a SINGLE source file.

Methods

compile

parcels.compilation.codecompiler.GNUCompiler[source]#

alias of GNUCompiler_SS

class parcels.compilation.codecompiler.GNUCompiler_SS(cppargs=None, ldargs=None, incdirs=None, libdirs=None, libs=None, tmp_dir='/home/docs/checkouts/readthedocs.org/user_builds/parcels/checkouts/latest/docs')[source]#

Bases: CCompiler_SS

A compiler object for the GNU Linux toolchain.

Parameters
  • cppargs – A list of arguments to pass to the C compiler (optional).

  • ldargs – A list of arguments to pass to the linker (optional).

Methods

compile