Problem with moving mesh and remeshing technique..
I have recently been trying in vain to simulate a piston moving within a cylinder representing a simple IC engine. I started by using a thin cross section model and have successfully obtained a simple model with the piston movement dictated by a userfunction.
I then wanted to produce a full 3D cylindrical model of this. When attempting to do this using the same techniques I had before I kept getting an error related to a negative element or volume within the mesh around half way done the piston's first stroke. I have tried various simplified models and even just a small piston inside a large cylinder but with no luck.
I have also tried using the remeshing technique with ICEM meshing as described in the EDR tutorial from this link:
Using this technique I still get unexplained errors.
If anyone could shed any light onto why this is happening and/or how I can overcome them or if there is another way I should be going about this I would be very very grateful.
I have done zillions of IC engine models in a past life as an automotive engineer. I was using CFX before the remeshing became a realistic option so my mesh had to do the entire motion from BDC to TDC without folding. I found that if you meshed it at BDC and squashed it to TDC it would always fold, but if you meshed it at TDC and stretched it to BDC it would work fine.
So my recommendation is to stretch the mesh out, do not compress it.
If you need to do BDC to TDC for some reason, or several cycles, then to avoid the mesh folding (I assume it's a hex mesh) you would need to specify the mesh motion using a subdomain that covers the entire deforming mesh zone. The displacement of each node can be specified using a weighting function. So the bottom moves with some imposed function, say sin(t). The top is stationary. The displacement of all nodes can be described by a linear weighting function multiplied by sin(t), where the weighting function returns zero at the top and 1 and the bottom. Since the bottom is moving, then use a callback such as areaAve(zGlobal)@bottom to get the coordinate location of the bottom.
|All times are GMT -4. The time now is 16:54.|