File: FixedStepWithCross.tmpl

package info (click to toggle)
xmds2 3.1.0%2Bdfsg2-10
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 42,580 kB
  • sloc: python: 64,048; cpp: 4,868; ansic: 1,463; makefile: 144; sh: 54; javascript: 8
file content (72 lines) | stat: -rw-r--r-- 2,757 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@shBang #!/usr/bin/env python3

@*
FixedStepWithCross.tmpl

Created by Graham Dennis on 2008-11-12.

Copyright (c) 2008-2012, Graham Dennis

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

*@
@extends xpdeint.Segments.Integrators._FixedStepWithCross

@def leftRightDeltaAFunctionBody($function, $replacementOperatorContainer)
  @#
  @# First evaluate any computed vector that any of our operators may depend on
${evaluateComputedVectors($dynamicVectorsNeedingPrecalculationForOperatorContainers($intraStepOperatorContainers), static = False)}@slurp
  @#
  @# Then loop over operators that come before the delta A operators in the order in which
  @# they appear in the xmds script.
  @#
  @for $operatorContainer in $intraStepOperatorContainers

${operatorContainer.evaluatePreDeltaAOperators(parentFunction = function)}@slurp
  @end for
  @#
  @# Now loop over delta A operators
  @# See the comment in _Integrator about why this needs to be done in
  @# this particular order
  @for $operatorContainer in $intraStepOperatorContainersInFieldDescendingOrder
    @# Blank line for formatting

    @if not operatorContainer == $operatorContainerToOverride
${operatorContainer.evaluateDeltaAOperator(parentFunction = function)}@slurp
    @else
${replacementOperatorContainer.evaluateDeltaAOperator(parentFunction = function)}@slurp
    @end if
  @end for
  @#
  @# Lastly, loop over the operators that come after the delta a operators in the order in
  @# which they appear in the xmds script.
  @#
  @for $operatorContainer in $intraStepOperatorContainers
    @# Blank line for formatting

${operatorContainer.evaluatePostDeltaAOperators(parentFunction = function)}@slurp
  @end for
  @#

  @set $integrationVectorsNeedingUpdating = $integrationVectors
  @silent integrationVectorsNeedingUpdating.difference_update(replacementOperatorContainer.deltaAOperator.integrationVectors)
${transformVectorsToBasis($integrationVectorsNeedingUpdating, $homeBasis), autoIndent=True}@slurp

${loopOverVectorsWithInnerContentTemplate($integrationVectorsNeedingUpdating,
c"""// a = oldcopy + a
_\${vector.id}[\$index] += _${name}_oldcopy_\${vector.id}[\$index];
""", basis = $homeBasis)}@slurp
  @#
@end def