Commit 8e805ab
committed
dsl: Differentiate a mixed-staggering sum term by term
`Add` reports its first argument's `indices_ref`, so a sum whose terms sit at
different staggered locations names a position only one of them has, and `x0`
gets resolved against it for all of them. The shear strain `v_x.dy + v_y.dx`
of a staggered velocity is the canonical case: both terms land on the cell
corner, so a shift onto it should be a no-op, and instead each picked up a
spurious one.
Differentiation is linear at every order, so split such a sum in
`Derivative._eval_fd`. Relative error on `D(a+b)` against `D(a) + D(b)` was
0.63 at order 0, 1.20 at order 1 and 0.95 at order 2, with `expand=False` at
order 2 returning exactly zero.
`generic_derivative` also short-circuited a zeroth order derivative only when
`x0` was empty, building a stencil around an expression already sitting at
`x0`. `index_at` answers where an expression sits, and both call sites use it.1 parent 598061a commit 8e805ab
3 files changed
Lines changed: 73 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
575 | 575 | | |
576 | 576 | | |
577 | 577 | | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
578 | 584 | | |
579 | 585 | | |
580 | 586 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
103 | 126 | | |
104 | 127 | | |
105 | 128 | | |
| |||
139 | 162 | | |
140 | 163 | | |
141 | 164 | | |
142 | | - | |
143 | | - | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
144 | 168 | | |
145 | 169 | | |
146 | 170 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1461 | 1461 | | |
1462 | 1462 | | |
1463 | 1463 | | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
0 commit comments