Re: [firedrake] Mapping nodal values from parent to extruded mesh
Hi Tuomas, Concerning the sets of spaces which this will work for, I think that the current implementation probably works for any horizontal space but only for vertical CG. One could just try relaxing the test in that case. The reason for the restriction to vertical CG is that fs.bt_masks uses the topological association of nodes with mesh entities in order to work out which nodes are on the top or bottom of the cell. In order to allow DG in the vertical, it would be necessary to support the geometric definition (ie which basis functions do not vanish on the top/bottom). If you look at functionspace.py:78 you can see where the bottom and top masks are generated. This uses entity_closure_dofs() from FIAT. In order to use the geometric definition of dofs one would need to support using facet_support_dofs() (which is how BC maps are set up at functionspace.py:375). Currently FIAT TensorFiniteElement objects do support entity_closure_dofs() but nobody has done the legwork to get them to support facet_support_dofs. Concerning documentation, COFFEE is deplorably underdocumented (although the author is on this list so maybe this will change ;). The actual available AST nodes are only "documented" by reading the source: https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py However, you are fundamentally writing a PyOP2 kernel, and the C api for that *is* documented at: http://op2.github.io/PyOP2/kernels.html so that hopefully helps somewhat. Otherwise, keep asking here or in IRC (IRC tends to get faster responses, at least between about 10am and 8pm UK time). BTW, any chance of seeing you at FEniCS '15? Cheers, David On 10 April 2015 at 02:44, Tuomas Karna <tuomas.karna@gmail.com> wrote:
Hi all,
A couple of questions regarding those extruded mesh -> parent mesh copy operations,
A while back I got the reverse 2d->3d copy working with a hard-coded pyop2 kernel (like in mesh extrusion). I'm not familiar with COFFEE syntax, is there documentation/examples somewhere?
The 3d->2d copy routine in extrusion_extraction branch checks that the function space is CG. Does this method easily generalize to other spaces? DGxCG prisms seem to work OK. I'm also interested in using DGxDG and RTxCG/DG spaces.
Cheers,
Tuomas
On 03/05/2015 10:24 AM, Tuomas Karna wrote:
Thanks David,
This is great, I'll try doing the reverse operation.
- Tuomas
On 03/05/2015 08:20 AM, David Ham wrote:
Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David
On 4 March 2015 at 22:23, Tuomas Karna <tuomas.karna@gmail.com> wrote:
Hi all,
I'd need to copy nodal values between fields on parent and extruded meshes. For example, copy 2d->3d (constant over vertical) or 3d->2d (extract surface/bottom level). The horizontal function space is the same. Is there an easy way to do this? Is there a map of extruded nodes somewhere?
Thanks,
Tuomas
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing listfiredrake@imperial.ac.ukhttps://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London http://www.imperial.ac.uk/people/david.ham
Hi, facet_support_dofs is the same infrastructure we use to support geometric boundary conditions. I have implemented geometric boundary conditions for (unstructured) quadrilaterals, it wasn't too complicated: https://bitbucket.org/mapdes/fiat/pull-request/29/geometric-bcs-for-quadrila... For general tensor product elements it would be a bit more complicated, as horizontal and vertical facets are in general different. For example, a prism has quadrilaterals as vertical facets, but triangles as horizontal facets. Regards, Miklos On 10/04/15 11:23, David Ham wrote:
Hi Tuomas,
Concerning the sets of spaces which this will work for, I think that the current implementation probably works for any horizontal space but only for vertical CG. One could just try relaxing the test in that case.
The reason for the restriction to vertical CG is that fs.bt_masks uses the topological association of nodes with mesh entities in order to work out which nodes are on the top or bottom of the cell. In order to allow DG in the vertical, it would be necessary to support the geometric definition (ie which basis functions do not vanish on the top/bottom).
If you look at functionspace.py:78 you can see where the bottom and top masks are generated. This uses entity_closure_dofs() from FIAT. In order to use the geometric definition of dofs one would need to support using facet_support_dofs() (which is how BC maps are set up at functionspace.py:375). Currently FIAT TensorFiniteElement objects do support entity_closure_dofs() but nobody has done the legwork to get them to support facet_support_dofs.
Concerning documentation, COFFEE is deplorably underdocumented (although the author is on this list so maybe this will change ;). The actual available AST nodes are only "documented" by reading the source: https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py However, you are fundamentally writing a PyOP2 kernel, and the C api for that *is* documented at: http://op2.github.io/PyOP2/kernels.html so that hopefully helps somewhat.
Otherwise, keep asking here or in IRC (IRC tends to get faster responses, at least between about 10am and 8pm UK time).
BTW, any chance of seeing you at FEniCS '15?
Cheers,
David
On 10 April 2015 at 02:44, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
A couple of questions regarding those extruded mesh -> parent mesh copy operations,
A while back I got the reverse 2d->3d copy working with a hard-coded pyop2 kernel (like in mesh extrusion). I'm not familiar with COFFEE syntax, is there documentation/examples somewhere?
The 3d->2d copy routine in extrusion_extraction branch checks that the function space is CG. Does this method easily generalize to other spaces? DGxCG prisms seem to work OK. I'm also interested in using DGxDG and RTxCG/DG spaces.
Cheers,
Tuomas
On 03/05/2015 10:24 AM, Tuomas Karna wrote:
Thanks David,
This is great, I'll try doing the reverse operation.
- Tuomas
On 03/05/2015 08:20 AM, David Ham wrote:
Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David
On 4 March 2015 at 22:23, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
I'd need to copy nodal values between fields on parent and extruded meshes. For example, copy 2d->3d (constant over vertical) or 3d->2d (extract surface/bottom level). The horizontal function space is the same. Is there an easy way to do this? Is there a map of extruded nodes somewhere?
Thanks,
Tuomas
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
Hi Miklos, I see. So, if I read this correctly, the reference element two_product_cell needs get_facet_element and get_facet_transform methods? But the former needs to be generalized as the facet element depends on the facet? - Tuomas On 04/10/2015 04:04 AM, Miklos Homolya wrote:
Hi,
facet_support_dofs is the same infrastructure we use to support geometric boundary conditions.
I have implemented geometric boundary conditions for (unstructured) quadrilaterals, it wasn't too complicated: https://bitbucket.org/mapdes/fiat/pull-request/29/geometric-bcs-for-quadrila...
For general tensor product elements it would be a bit more complicated, as horizontal and vertical facets are in general different. For example, a prism has quadrilaterals as vertical facets, but triangles as horizontal facets.
Regards, Miklos
On 10/04/15 11:23, David Ham wrote:
Hi Tuomas,
Concerning the sets of spaces which this will work for, I think that the current implementation probably works for any horizontal space but only for vertical CG. One could just try relaxing the test in that case.
The reason for the restriction to vertical CG is that fs.bt_masks uses the topological association of nodes with mesh entities in order to work out which nodes are on the top or bottom of the cell. In order to allow DG in the vertical, it would be necessary to support the geometric definition (ie which basis functions do not vanish on the top/bottom).
If you look at functionspace.py:78 you can see where the bottom and top masks are generated. This uses entity_closure_dofs() from FIAT. In order to use the geometric definition of dofs one would need to support using facet_support_dofs() (which is how BC maps are set up at functionspace.py:375). Currently FIAT TensorFiniteElement objects do support entity_closure_dofs() but nobody has done the legwork to get them to support facet_support_dofs.
Concerning documentation, COFFEE is deplorably underdocumented (although the author is on this list so maybe this will change ;). The actual available AST nodes are only "documented" by reading the source: https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py However, you are fundamentally writing a PyOP2 kernel, and the C api for that *is* documented at: http://op2.github.io/PyOP2/kernels.html so that hopefully helps somewhat.
Otherwise, keep asking here or in IRC (IRC tends to get faster responses, at least between about 10am and 8pm UK time).
BTW, any chance of seeing you at FEniCS '15?
Cheers,
David
On 10 April 2015 at 02:44, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
A couple of questions regarding those extruded mesh -> parent mesh copy operations,
A while back I got the reverse 2d->3d copy working with a hard-coded pyop2 kernel (like in mesh extrusion). I'm not familiar with COFFEE syntax, is there documentation/examples somewhere?
The 3d->2d copy routine in extrusion_extraction branch checks that the function space is CG. Does this method easily generalize to other spaces? DGxCG prisms seem to work OK. I'm also interested in using DGxDG and RTxCG/DG spaces.
Cheers,
Tuomas
On 03/05/2015 10:24 AM, Tuomas Karna wrote:
Thanks David,
This is great, I'll try doing the reverse operation.
- Tuomas
On 03/05/2015 08:20 AM, David Ham wrote:
Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David
On 4 March 2015 at 22:23, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
I'd need to copy nodal values between fields on parent and extruded meshes. For example, copy 2d->3d (constant over vertical) or 3d->2d (extract surface/bottom level). The horizontal function space is the same. Is there an easy way to do this? Is there a map of extruded nodes somewhere?
Thanks,
Tuomas
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
Hi Tuomas, Yes, that's correct. And, of course, then the callers of get_facet_element (FacetQuadratureRule in particular) need to be updated to provide the facet number. Miklos
On 11 Apr 2015, at 01:20, Tuomas Karna <tuomas.karna@gmail.com> wrote:
Hi Miklos,
I see. So, if I read this correctly, the reference element two_product_cell needs get_facet_element and get_facet_transform methods? But the former needs to be generalized as the facet element depends on the facet?
- Tuomas
On 04/10/2015 04:04 AM, Miklos Homolya wrote:
Hi,
facet_support_dofs is the same infrastructure we use to support geometric boundary conditions.
I have implemented geometric boundary conditions for (unstructured) quadrilaterals, it wasn't too complicated: https://bitbucket.org/mapdes/fiat/pull-request/29/geometric-bcs-for-quadrila... <https://bitbucket.org/mapdes/fiat/pull-request/29/geometric-bcs-for-quadrilaterals/diff>
For general tensor product elements it would be a bit more complicated, as horizontal and vertical facets are in general different. For example, a prism has quadrilaterals as vertical facets, but triangles as horizontal facets.
Regards, Miklos
On 10/04/15 11:23, David Ham wrote:
Hi Tuomas,
Concerning the sets of spaces which this will work for, I think that the current implementation probably works for any horizontal space but only for vertical CG. One could just try relaxing the test in that case.
The reason for the restriction to vertical CG is that fs.bt_masks uses the topological association of nodes with mesh entities in order to work out which nodes are on the top or bottom of the cell. In order to allow DG in the vertical, it would be necessary to support the geometric definition (ie which basis functions do not vanish on the top/bottom).
If you look at functionspace.py:78 you can see where the bottom and top masks are generated. This uses entity_closure_dofs() from FIAT. In order to use the geometric definition of dofs one would need to support using facet_support_dofs() (which is how BC maps are set up at functionspace.py:375). Currently FIAT TensorFiniteElement objects do support entity_closure_dofs() but nobody has done the legwork to get them to support facet_support_dofs.
Concerning documentation, COFFEE is deplorably underdocumented (although the author is on this list so maybe this will change ;). The actual available AST nodes are only "documented" by reading the source: https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py <https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py> However, you are fundamentally writing a PyOP2 kernel, and the C api for that *is* documented at: http://op2.github.io/PyOP2/kernels.html <http://op2.github.io/PyOP2/kernels.html> so that hopefully helps somewhat.
Otherwise, keep asking here or in IRC (IRC tends to get faster responses, at least between about 10am and 8pm UK time).
BTW, any chance of seeing you at FEniCS '15?
Cheers,
David
On 10 April 2015 at 02:44, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote: Hi all,
A couple of questions regarding those extruded mesh -> parent mesh copy operations,
A while back I got the reverse 2d->3d copy working with a hard-coded pyop2 kernel (like in mesh extrusion). I'm not familiar with COFFEE syntax, is there documentation/examples somewhere?
The 3d->2d copy routine in extrusion_extraction branch checks that the function space is CG. Does this method easily generalize to other spaces? DGxCG prisms seem to work OK. I'm also interested in using DGxDG and RTxCG/DG spaces.
Cheers,
Tuomas
On 03/05/2015 10:24 AM, Tuomas Karna wrote:
Thanks David,
This is great, I'll try doing the reverse operation.
- Tuomas
On 03/05/2015 08:20 AM, David Ham wrote:
Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David
On 4 March 2015 at 22:23, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote: Hi all,
I'd need to copy nodal values between fields on parent and extruded meshes. For example, copy 2d->3d (constant over vertical) or 3d->2d (extract surface/bottom level). The horizontal function space is the same. Is there an easy way to do this? Is there a map of extruded nodes somewhere?
Thanks,
Tuomas
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake <https://mailman.ic.ac.uk/mailman/listinfo/firedrake>
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham <http://www.imperial.ac.uk/people/david.ham>
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake <https://mailman.ic.ac.uk/mailman/listinfo/firedrake>
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham <http://www.imperial.ac.uk/people/david.ham>
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake <https://mailman.ic.ac.uk/mailman/listinfo/firedrake>
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake <https://mailman.ic.ac.uk/mailman/listinfo/firedrake>
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
Hi, With respect to getting correct fs.bt_masks for extruded DG elements, I have a FIAT branch that supports facet_support_dofs for tensor elements. Currently only triangular prisms work but it's straightforward to generalize. There were a couple of steps I wasn't sure how to best implement. Should I push the branch to bitbucket.org/mapdes/fiat so someone could take a look? This also requires a small patch in Firedrake functionspace.py. - Tuomas On 04/11/2015 12:46 AM, Miklos Homolya wrote:
Hi Tuomas,
Yes, that's correct. And, of course, then the callers of get_facet_element (FacetQuadratureRule in particular) need to be updated to provide the facet number.
Miklos
On 11 Apr 2015, at 01:20, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi Miklos,
I see. So, if I read this correctly, the reference element two_product_cell needs get_facet_element and get_facet_transform methods? But the former needs to be generalized as the facet element depends on the facet?
- Tuomas
On 04/10/2015 04:04 AM, Miklos Homolya wrote:
Hi,
facet_support_dofs is the same infrastructure we use to support geometric boundary conditions.
I have implemented geometric boundary conditions for (unstructured) quadrilaterals, it wasn't too complicated: https://bitbucket.org/mapdes/fiat/pull-request/29/geometric-bcs-for-quadrila...
For general tensor product elements it would be a bit more complicated, as horizontal and vertical facets are in general different. For example, a prism has quadrilaterals as vertical facets, but triangles as horizontal facets.
Regards, Miklos
On 10/04/15 11:23, David Ham wrote:
Hi Tuomas,
Concerning the sets of spaces which this will work for, I think that the current implementation probably works for any horizontal space but only for vertical CG. One could just try relaxing the test in that case.
The reason for the restriction to vertical CG is that fs.bt_masks uses the topological association of nodes with mesh entities in order to work out which nodes are on the top or bottom of the cell. In order to allow DG in the vertical, it would be necessary to support the geometric definition (ie which basis functions do not vanish on the top/bottom).
If you look at functionspace.py:78 you can see where the bottom and top masks are generated. This uses entity_closure_dofs() from FIAT. In order to use the geometric definition of dofs one would need to support using facet_support_dofs() (which is how BC maps are set up at functionspace.py:375). Currently FIAT TensorFiniteElement objects do support entity_closure_dofs() but nobody has done the legwork to get them to support facet_support_dofs.
Concerning documentation, COFFEE is deplorably underdocumented (although the author is on this list so maybe this will change ;). The actual available AST nodes are only "documented" by reading the source: https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py However, you are fundamentally writing a PyOP2 kernel, and the C api for that *is* documented at: http://op2.github.io/PyOP2/kernels.html so that hopefully helps somewhat.
Otherwise, keep asking here or in IRC (IRC tends to get faster responses, at least between about 10am and 8pm UK time).
BTW, any chance of seeing you at FEniCS '15?
Cheers,
David
On 10 April 2015 at 02:44, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
A couple of questions regarding those extruded mesh -> parent mesh copy operations,
A while back I got the reverse 2d->3d copy working with a hard-coded pyop2 kernel (like in mesh extrusion). I'm not familiar with COFFEE syntax, is there documentation/examples somewhere?
The 3d->2d copy routine in extrusion_extraction branch checks that the function space is CG. Does this method easily generalize to other spaces? DGxCG prisms seem to work OK. I'm also interested in using DGxDG and RTxCG/DG spaces.
Cheers,
Tuomas
On 03/05/2015 10:24 AM, Tuomas Karna wrote:
Thanks David,
This is great, I'll try doing the reverse operation.
- Tuomas
On 03/05/2015 08:20 AM, David Ham wrote:
Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David
On 4 March 2015 at 22:23, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
I'd need to copy nodal values between fields on parent and extruded meshes. For example, copy 2d->3d (constant over vertical) or 3d->2d (extract surface/bottom level). The horizontal function space is the same. Is there an easy way to do this? Is there a map of extruded nodes somewhere?
Thanks,
Tuomas
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 03/06/15 19:37, Tuomas Karna wrote:
Hi,
With respect to getting correct fs.bt_masks for extruded DG elements, I have a FIAT branch that supports facet_support_dofs for tensor elements. Currently only triangular prisms work but it's straightforward to generalize. There were a couple of steps I wasn't sure how to best implement. Should I push the branch to bitbucket.org/mapdes/fiat so someone could take a look? This also requires a small patch in Firedrake functionspace.py.
This sounds like a good idea. You probably don't have push access to the relevant repositories, so either create pull-requests from your branches, or else let me know your bitbucket/github usernames and I can work the appropriate permissions magic. Cheers, Lawrence -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJVcCJHAAoJECOc1kQ8PEYvClkH/3vqjAP2pkfVMtfq08Udv8Z1 IYlUCwsue2ikiHQp8K7P8d/d++D5j/jKl76X+RRG586IHfi6OIiLq4H6E/8DLHhg Balps2VaeTUHT8VQaeBlBx89RpWSO1oS/2p/s9yad7qaXI4RIzhYAx9FocszAff7 zgbMYY5gIhTO+wWMEBLEgl6tu+gHsTHfF4D8t6JPErWBX19WVYxn6NV9cvapmrde diMa58wk6jhD1gt0R1XpbmqUrxZWef/xU1YZBHhTuBYGV/NjOJVXJa4HhAZAfaYG wDRsZNXBvVHlHSGbL5bRnblPTmYmIswoTUsELeXclVjCRVn8JlPXwJ3L+ZxjHQs= =gP6Z -----END PGP SIGNATURE-----
Hi David, Thanks for the clarification, this all makes sense. I think for the time being I can live with CG in vertical. The pyop2 kernel documentation is great. Is there a reason to prefer AST over hard-coded kernels? Optimization?
BTW, any chance of seeing you at FEniCS '15? Yes, I'm planning to attend, will submit abstract shortly.
- Tuomas On 04/10/2015 03:23 AM, David Ham wrote:
Hi Tuomas,
Concerning the sets of spaces which this will work for, I think that the current implementation probably works for any horizontal space but only for vertical CG. One could just try relaxing the test in that case.
The reason for the restriction to vertical CG is that fs.bt_masks uses the topological association of nodes with mesh entities in order to work out which nodes are on the top or bottom of the cell. In order to allow DG in the vertical, it would be necessary to support the geometric definition (ie which basis functions do not vanish on the top/bottom).
If you look at functionspace.py:78 you can see where the bottom and top masks are generated. This uses entity_closure_dofs() from FIAT. In order to use the geometric definition of dofs one would need to support using facet_support_dofs() (which is how BC maps are set up at functionspace.py:375). Currently FIAT TensorFiniteElement objects do support entity_closure_dofs() but nobody has done the legwork to get them to support facet_support_dofs.
Concerning documentation, COFFEE is deplorably underdocumented (although the author is on this list so maybe this will change ;). The actual available AST nodes are only "documented" by reading the source: https://github.com/coneoproject/COFFEE/blob/master/coffee/base.py However, you are fundamentally writing a PyOP2 kernel, and the C api for that *is* documented at: http://op2.github.io/PyOP2/kernels.html so that hopefully helps somewhat.
Otherwise, keep asking here or in IRC (IRC tends to get faster responses, at least between about 10am and 8pm UK time).
BTW, any chance of seeing you at FEniCS '15?
Cheers,
David
On 10 April 2015 at 02:44, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
A couple of questions regarding those extruded mesh -> parent mesh copy operations,
A while back I got the reverse 2d->3d copy working with a hard-coded pyop2 kernel (like in mesh extrusion). I'm not familiar with COFFEE syntax, is there documentation/examples somewhere?
The 3d->2d copy routine in extrusion_extraction branch checks that the function space is CG. Does this method easily generalize to other spaces? DGxCG prisms seem to work OK. I'm also interested in using DGxDG and RTxCG/DG spaces.
Cheers,
Tuomas
On 03/05/2015 10:24 AM, Tuomas Karna wrote:
Thanks David,
This is great, I'll try doing the reverse operation.
- Tuomas
On 03/05/2015 08:20 AM, David Ham wrote:
Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David
On 4 March 2015 at 22:23, Tuomas Karna <tuomas.karna@gmail.com <mailto:tuomas.karna@gmail.com>> wrote:
Hi all,
I'd need to copy nodal values between fields on parent and extruded meshes. For example, copy 2d->3d (constant over vertical) or 3d->2d (extract surface/bottom level). The horizontal function space is the same. Is there an easy way to do this? Is there a map of extruded nodes somewhere?
Thanks,
Tuomas
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk <mailto:firedrake@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
-- Dr David Ham Departments of Mathematics and Computing Imperial College London
http://www.imperial.ac.uk/people/david.ham
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake
participants (4)
- 
                
                David Ham
- 
                
                Lawrence Mitchell
- 
                
                Miklos Homolya
- 
                
                Tuomas Karna