pystencils merge requestshttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests2020-01-10T10:22:59+01:00https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/119Opencl datahandling2020-01-10T10:22:59+01:00Stephan SeitzOpencl datahandlingSince the `target_dh_refactoring` was never merged, we decided to do the refactoring at smaller steps and recover the original OpenCL datahandling PR.
Refactoring to merge `target` and `backend` can be done later.Since the `target_dh_refactoring` was never merged, we decided to do the refactoring at smaller steps and recover the original OpenCL datahandling PR.
Refactoring to merge `target` and `backend` can be done later.https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/118Allow functions for Field.coordinate_transform2020-01-09T20:20:23+01:00Stephan SeitzAllow functions for Field.coordinate_transformThis lets you quickly switch to polar coordinate systems:
```python
field.coordinate_transform = lambda x: sympy.Matrix((x.norm(), sympy.atan2(*x) / (2 * sympy.pi) * field.shape[1]))
```This lets you quickly switch to polar coordinate systems:
```python
field.coordinate_transform = lambda x: sympy.Matrix((x.norm(), sympy.atan2(*x) / (2 * sympy.pi) * field.shape[1]))
```https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/115:star: :star: :star: Add a star to correctly get atoms of InterpolatorAccess ...2019-12-19T15:40:16+01:00Stephan Seitz:star: :star: :star: Add a star to correctly get atoms of InterpolatorAccess :star: :star: :star:https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/114Fix AssignmentCollection.{free_symbols,bound_symbols,defined_symbols} for non...2019-12-19T23:28:04+01:00Stephan SeitzFix AssignmentCollection.{free_symbols,bound_symbols,defined_symbols} for non-AssignmentsThis should allow to execute AssignmentCollection.{free_symbols,bound_symbols,symbols_defined} on AssignmentCollection that do not exclusively contain `pystencils.Assignments`.
Should fix lbmpy tests (let's see if that's true).This should allow to execute AssignmentCollection.{free_symbols,bound_symbols,symbols_defined} on AssignmentCollection that do not exclusively contain `pystencils.Assignments`.
Should fix lbmpy tests (let's see if that's true).https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/110Update AssignmentCollection.__repr__2019-12-18T21:14:57+01:00Stephan SeitzUpdate AssignmentCollection.__repr__`Assignment Collection for y[0,0,0]` is usually not very helpful.
New representation:
```
In [6]: forward_assignments = pystencils.AssignmentCollection({
...: z[0, 0]: x[0, 0] * sympy.log(x[0, 0] * y[0, 0]),
...: ...`Assignment Collection for y[0,0,0]` is usually not very helpful.
New representation:
```
In [6]: forward_assignments = pystencils.AssignmentCollection({
...: z[0, 0]: x[0, 0] * sympy.log(x[0, 0] * y[0, 0]),
...: y[0,0] : x[1,1] +1
...: })
In [7]: forward_assignments
Out[7]: AssignmentCollection: z_C, y_C <- f(x_C, x_NE)
```https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/109FiniteDifferenceStaggeredStencilDerivation must be applied to field access2019-12-18T21:15:21+01:00Michael Kuronmkuron@icp.uni-stuttgart.deFiniteDifferenceStaggeredStencilDerivation must be applied to field accessotherwise the index gets lost.
Also, fix the staggered field access prettyprinter. It was correct after !86 but printed wrong indices after !92. I have now added a test.otherwise the index gets lost.
Also, fix the staggered field access prettyprinter. It was correct after !86 but printed wrong indices after !92. I have now added a test.Martin BauerMartin Bauerhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/108AssignmentCollection.__bool__2019-12-17T13:30:15+01:00Stephan SeitzAssignmentCollection.__bool__`AssignmentCollection` can be used in many cases where you could also use
a `List[Assignment]`. With `AssignmentCollection.__bool__`, an empty
AssignmentCollection is falsy and a non-empty one truthy.
So you can `assert assignments,...`AssignmentCollection` can be used in many cases where you could also use
a `List[Assignment]`. With `AssignmentCollection.__bool__`, an empty
AssignmentCollection is falsy and a non-empty one truthy.
So you can `assert assignments, 'must not be emtpy'`https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/107Allow `CUSTOM_FIELD`s to have a different size in transformations.py2019-12-17T13:16:06+01:00Stephan SeitzAllow `CUSTOM_FIELD`s to have a different size in transformations.pyhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/105Fix FiniteDifferenceStaggeredStencilDerivation on Sympy 1.12019-12-16T15:05:39+01:00Michael Kuronmkuron@icp.uni-stuttgart.deFix FiniteDifferenceStaggeredStencilDerivation on Sympy 1.1I broke it in !104I broke it in !104Martin BauerMartin Bauerhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/104Minor improvements to FiniteDifferenceStaggeredStencilDerivation2019-12-06T20:20:51+01:00Michael Kuronmkuron@icp.uni-stuttgart.deMinor improvements to FiniteDifferenceStaggeredStencilDerivationMartin BauerMartin Bauerhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/103Fix printing for Functions without name2019-12-05T13:17:02+01:00Stephan SeitzFix printing for Functions without nameThis fixes test for LLVM GPU using pointer_arith_funcThis fixes test for LLVM GPU using pointer_arith_funchttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/102Fix OpenCL for CUDA OpenCL by avoid int(...) constructor2019-12-05T13:17:16+01:00Stephan SeitzFix OpenCL for CUDA OpenCL by avoid int(...) constructorPrefer c-style cast instead.Prefer c-style cast instead.https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/99finite difference stencil derivation for staggered positions2019-12-04T11:05:30+01:00Michael Kuronmkuron@icp.uni-stuttgart.definite difference stencil derivation for staggered positionsMartin BauerMartin Bauerhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/96Add own implementation for printing an unknown function2019-12-03T13:38:45+01:00Stephan SeitzAdd own implementation for printing an unknown functionUsing the SymPy implementation for printing a `sympy.Function` has some issues:
- you cannot use `cast_func` as an argument -> SymPy prints
`cast_func(2,float)
- typed numbers are not typed any more -> e.g. pow(x, 0.25) instead o...Using the SymPy implementation for printing a `sympy.Function` has some issues:
- you cannot use `cast_func` as an argument -> SymPy prints
`cast_func(2,float)
- typed numbers are not typed any more -> e.g. pow(x, 0.25) instead of
pow(x, 0.25f)
Maybe a disadvantage or an advantage:
- arbitrary Functions: sympy.Function('my_function') are now allowed.
Would have prevented commits like:
Fix: type of sqrt(int) was int not floating point typehttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/95Auto for assignments2019-12-04T10:58:44+01:00Stephan SeitzAuto for assignmentsI had problems to teach pystencils C's weird type system for complex numbers with `auto` everything was working fine.I had problems to teach pystencils C's weird type system for complex numbers with `auto` everything was working fine.https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/94Add __getnewargs__ to TypedImaginaryUnit2019-11-30T00:38:52+01:00Stephan SeitzAdd __getnewargs__ to TypedImaginaryUnitThere was a problem when pickling TypedImaginaryUnit since it was using the __getnewargs__ of TypedSymbol.There was a problem when pickling TypedImaginaryUnit since it was using the __getnewargs__ of TypedSymbol.https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/93Reimplement create_staggered_kernel2020-01-14T15:46:47+01:00Michael Kuronmkuron@icp.uni-stuttgart.deReimplement create_staggered_kernel`create_staggered_kernel` now takes a list of assignments to staggered fields and otherwise behaves like `create_kernel`. I have included a diffusion equation test case in both D2Q5 and D2Q9. Putting vectorial/tensorial quantities on the...`create_staggered_kernel` now takes a list of assignments to staggered fields and otherwise behaves like `create_kernel`. I have included a diffusion equation test case in both D2Q5 and D2Q9. Putting vectorial/tensorial quantities on the staggered points also works.
This merge requests break API compatibility with the previous `create_staggered_kernel`.
Fixes #16. My next step is to implement automatic FV discretization.
Build of dependent projects (pygrandchem, pystencils_walberla) passes as per https://i10git.cs.fau.de/pycodegen/pycodegen/merge_requests/6.
Martin BauerMartin Bauerhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/92More staggered grid improvements2019-12-17T14:52:00+01:00Michael Kuronmkuron@icp.uni-stuttgart.deMore staggered grid improvements- Fix access to directions with mixed signs (`NW`, `(-1/2, 1/2)` and the like). They were previously mapped to the wrong cell.
- When storing fluxes on a staggered grid, the usual sign convention is that
fluxes point outward from the c...- Fix access to directions with mixed signs (`NW`, `(-1/2, 1/2)` and the like). They were previously mapped to the wrong cell.
- When storing fluxes on a staggered grid, the usual sign convention is that
fluxes point outward from the cell. Previously, we did not consistently respect that
(`staggered_access("E")` would return the same thing as `staggered_access("W")`
did when called from the eastern-next cell). Now, when a field is declared
as `STAGGERED_FLUX`, it returns an accessor with a prefactor of -1 in that
case. The previous behavior where sign is not reversed is still useful when
e.g. storing sums (e.g. mean values) instead of differenes (e.g. finite
difference fluxes) on the staggered grid.
- `staggered_vector_access` returns a vector/tensor full of `Access` objects corresponding to the shape (`index_shape[1:]`) of the staggered fieldMartin BauerMartin Bauerhttps://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/91Avoid `hash()` in Field.hashable_contents2019-11-21T20:27:55+01:00Stephan SeitzAvoid `hash()` in Field.hashable_contentshash should not be used in hashable_contents because even if we will use
a deterministic hash function we will end up non-deterministic since
hash is initialized with a random seed.hash should not be used in hashable_contents because even if we will use
a deterministic hash function we will end up non-deterministic since
hash is initialized with a random seed.https://i10git.cs.fau.de/pycodegen/pystencils/-/merge_requests/90Change `Field.__repr__` to match representation in `pystencils.fields`2019-11-21T20:28:32+01:00Stephan SeitzChange `Field.__repr__` to match representation in `pystencils.fields`__repr__ of Field should look like
```
y: uint16_t[246,704,558]
x(3): float[20,40]
```
to match representation when using `pystencils.fields`
E.g.
```
In [3]: pystencils.fields('x: float32[20,40]') ...__repr__ of Field should look like
```
y: uint16_t[246,704,558]
x(3): float[20,40]
```
to match representation when using `pystencils.fields`
E.g.
```
In [3]: pystencils.fields('x: float32[20,40]')
Out[3]: x: float[20,40])
In [4]: pystencils.fields('x(3): float32[20,40]')
Out[4]: x(3): float[20,40])
```