.. java:import:: fr.inria.tapenade.analysis ActivityPattern .. java:import:: fr.inria.tapenade.representation ArrayDim .. java:import:: fr.inria.tapenade.representation ArrayTypeSpec .. java:import:: fr.inria.tapenade.representation CallArrow .. java:import:: fr.inria.tapenade.representation CompositeTypeSpec .. java:import:: fr.inria.tapenade.representation FieldDecl .. java:import:: fr.inria.tapenade.representation FunctionDecl .. java:import:: fr.inria.tapenade.representation ILUtils .. java:import:: fr.inria.tapenade.representation InterfaceDecl .. java:import:: fr.inria.tapenade.representation IterDescriptor .. java:import:: fr.inria.tapenade.representation NewSymbolHolder .. java:import:: fr.inria.tapenade.representation PointerTypeSpec .. java:import:: fr.inria.tapenade.representation SymbolDecl .. java:import:: fr.inria.tapenade.representation SymbolTable .. java:import:: fr.inria.tapenade.representation SymbolTableConstants .. java:import:: fr.inria.tapenade.representation TapEnv .. java:import:: fr.inria.tapenade.representation TapList .. java:import:: fr.inria.tapenade.representation TypeDecl .. java:import:: fr.inria.tapenade.representation TypeSpec .. java:import:: fr.inria.tapenade.representation Unit .. java:import:: fr.inria.tapenade.representation VariableDecl .. java:import:: fr.inria.tapenade.representation WrapperTypeSpec .. java:import:: fr.inria.tapenade.representation ZoneInfo .. java:import:: fr.inria.tapenade.utils ILLang .. java:import:: fr.inria.tapenade.utils TapIntList .. java:import:: fr.inria.tapenade.utils TapPair .. java:import:: fr.inria.tapenade.utils TapTriplet .. java:import:: fr.inria.tapenade.utils ToBool .. java:import:: fr.inria.tapenade.utils ToObject .. java:import:: fr.inria.tapenade.utils Tree VarRefDifferentiator ==================== .. java:package:: fr.inria.tapenade.differentiation :noindex: .. java:type:: public class VarRefDifferentiator Object that knows how to differentiate a variable. Fields ------ dirIndexSymbolHolder ^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected NewSymbolHolder dirIndexSymbolHolder :outertype: VarRefDifferentiator dirNumberMaxSymbolHolder ^^^^^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected NewSymbolHolder dirNumberMaxSymbolHolder :outertype: VarRefDifferentiator dirNumberSymbolHolder ^^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected NewSymbolHolder dirNumberSymbolHolder :outertype: VarRefDifferentiator multiDirDimensionMax ^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected ArrayDim multiDirDimensionMax :outertype: VarRefDifferentiator multiDirIterDescriptor ^^^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected IterDescriptor multiDirIterDescriptor :outertype: VarRefDifferentiator To get vector/multiDir indices in derivative vars and loops around derivative instructions. multiDirMaxIterDescriptor ^^^^^^^^^^^^^^^^^^^^^^^^^ .. java:field:: protected IterDescriptor multiDirMaxIterDescriptor :outertype: VarRefDifferentiator Constructors ------------ VarRefDifferentiator ^^^^^^^^^^^^^^^^^^^^ .. java:constructor:: protected VarRefDifferentiator(DifferentiationEnv adEnv) :outertype: VarRefDifferentiator Methods ------- buildAAInstructionVORD ^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected Tree buildAAInstructionVORD(Tree expression, SymbolTable diffSymbolTable, Tree diffVarRef, String vORd, boolean checkActive) :outertype: VarRefDifferentiator For association by address. :param expression: source Tree. :param diffSymbolTable: differentiated SymbolTable. :param diffVarRef: differentiated Tree. :param vORd: value or diff :param checkActive: when true, does the work only after checking activity. Otherwise always does the work, which I believe should always be the case... TODO: check this and then simplify! :return: if expression is x, returns x.v or x.d. buildDirNumberReference ^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected Tree buildDirNumberReference(SymbolTable usageSymbolTable) :outertype: VarRefDifferentiator diffSymbolName ^^^^^^^^^^^^^^ .. java:method:: protected Tree diffSymbolName(ActivityPattern pattern, String symbolName, SymbolTable diffSymbolTable, boolean searchAsVariable, boolean searchAsFunction, boolean searchAsModule, Tree callTree, WrapperTypeSpec[] actualTypes, boolean skipImportedSymbolTables, int diffSort, int diffSuffixSort, int symbolSort, Tree hintRootTree) :outertype: VarRefDifferentiator diffSymbolTree ^^^^^^^^^^^^^^ .. java:method:: protected Tree diffSymbolTree(ActivityPattern pattern, Tree symbolTree, SymbolTable diffSymbolTable, boolean searchAsVariable, boolean searchAsFunction, boolean searchAsModule, Tree callTree, boolean skipImportedSymbolTables, int diffSort, int diffSuffixSort, int symbolSort, Tree hintRootTree) :outertype: VarRefDifferentiator :param symbolTree: The op_ident Tree of the original, non-differentiated symbol. :param diffSymbolTable: The SymbolTable of the usage place of the future diff symbol in the future diff Unit. It must see the declaration of the diff symbol. :param searchAsVariable: True means that the given "symbolTree" may stand for a variable (but also maybe the function's return value). :param searchAsFunction: True means that the given "symbolTree" may stand for a procedure or procedure interface name. :param searchAsModule: True means that the given "symbolTree" may stand for a module name. :param callTree: When symbolTree is a procedure name, holds the procedure call Tree. :param skipImportedSymbolTables: When true, method will not search for "sibling" declarations in symbol tables that come from the USE (i.e. import) of a module. :param diffSort: The sort of differentiated symbol :param diffSuffixSort: the sort of differentiation, used to look for the correct suffix. :param symbolSort: the sort of symbol, used to look for the correct suffix. :param hintRootTree: The tree used in the hints for unknown dimensions. :return: a new Tree, that holds the differentiated symbol of the given "symbolTree". Takes care of distinguishing function names and variable names, takes care of the function return name, which in FORTRAN is equal to the function name. The new Tree is not finished (looks like #xd#), but is registered into the "diffSymbolTable", so that its definitive name will be chosen at the end and this new Tree will then be updated. diffVarRef ^^^^^^^^^^ .. java:method:: protected Tree diffVarRef(ActivityPattern pattern, Tree expression, SymbolTable diffSymbolTable, boolean identifyFunctionResult, Tree contextExpression, boolean needMultiDirDim, boolean addNbDirsDimContext, Tree hintRootTree) :outertype: VarRefDifferentiator Differentiate a reference to a variable. When "identifyFunctionResult" is true, we must take care of the case where the variable may be the result of the current function. In this case, the diff variable and the diff function must also have the same names. Most of the complexity of this function is due to the "vector mode", where derivatives receive an extra dimension wrt original variables. diffVarRefNoCopy ^^^^^^^^^^^^^^^^ .. java:method:: protected Tree diffVarRefNoCopy(ActivityPattern pattern, Tree expression, SymbolTable diffSymbolTable, boolean identifyFunctionResult, Tree hintRootTree) :outertype: VarRefDifferentiator Same as diffVarRef, but modifies the given "expression" in place. differentiateTypeTree ^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected Tree differentiateTypeTree(Tree typeTree, SymbolTable diffSymbolTable) :outertype: VarRefDifferentiator findDiffFuncName ^^^^^^^^^^^^^^^^ .. java:method:: protected Tree findDiffFuncName(ActivityPattern pattern, FunctionDecl functionDecl, int diffSort, SymbolTable diffSymbolTable, Tree declTree, boolean asAFunction, boolean asAnInterface) :outertype: VarRefDifferentiator Utility for diffDeclNames: differentiates a function name or interface name. If the differentiated newSymbolHolder is available, uses it. Otherwise differentiate the name through varRefDifferentiator().diffSymbolTree(). getMultiDirDimensionMax ^^^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected ArrayDim getMultiDirDimensionMax() :outertype: VarRefDifferentiator isCurFunctionName ^^^^^^^^^^^^^^^^^ .. java:method:: protected boolean isCurFunctionName(String varName) :outertype: VarRefDifferentiator :return: true if the given "varName" is actually the name of the enclosing Fortran function. isOnlyIncrementedDiff ^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected boolean isOnlyIncrementedDiff(ActivityPattern pattern, ZoneInfo zoneInfo) :outertype: VarRefDifferentiator mapDiffVarRef ^^^^^^^^^^^^^ .. java:method:: protected TapList mapDiffVarRef(ActivityPattern pattern, TapList expressions, SymbolTable diffSymbolTable) :outertype: VarRefDifferentiator multiDirMode ^^^^^^^^^^^^ .. java:method:: public boolean multiDirMode() :outertype: VarRefDifferentiator :return: the global adEnv.multiDirMode. paramHasOnlyLocalDiff ^^^^^^^^^^^^^^^^^^^^^ .. java:method:: protected boolean paramHasOnlyLocalDiff(ActivityPattern pattern, Tree varBaseTree, VariableDecl variableDecl) :outertype: VarRefDifferentiator :return: true when the variable in "varBaseTree" (assumed active inside curUnit) is a formal parameter of curUnit and is not active as a formal parameter because this parameter is passive upon entry and upon exit from curUnit. popDiffContext ^^^^^^^^^^^^^^ .. java:method:: protected void popDiffContext() :outertype: VarRefDifferentiator pushDiffContext ^^^^^^^^^^^^^^^ .. java:method:: protected void pushDiffContext(int newContext) :outertype: VarRefDifferentiator