View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003885 | OpenFOAM | Bug | public | 2022-09-14 13:34 | 2022-09-16 09:59 |
Reporter | heinten | Assigned To | henry | ||
Priority | low | Severity | trivial | Reproducibility | always |
Status | closed | Resolution | no change required | ||
Platform | GNU/Linux | OS | Other | OS Version | (please specify) |
Product Version | dev | ||||
Summary | 0003885: meshToMesh crashes with displacement*Laplacian | ||||
Description | The movingCone tutorial runs fine when it is set up with velocityComponentLaplacian in combination with meshToMesh (just as in the tutorial case). However, it always crashes when set up with displacementComponentLaplacian and an otherwise comparable setup. | ||||
Steps To Reproduce | Take the movingCone tutorial case and change its setup to use point displacement instead of velocity: (1) constant/dynamicMeshDict - change motion solver from velocityComponentLaplacian to displacementComponentLaplacian (2) system/fvSolution - change solver from cellMotionUx to cellDisplacementx (3) rename file 0/pointMotionUx to pointDisplacementx, adjust units and boundary type for moving wall to movingWall { type uniformFixedValue; uniformValue table ( ( 0 0 ) ( 1 1 ) ); } This results in exactly the same movement as with pointMotionUx. Start the Allrun script and observe the crash soon after the first meshToMesh interpolation took place at 0.0015 s. I have attached the changed tutorial case as a zip folder. | ||||
Tags | No tags attached. | ||||
|
|
|
In your test case, the deformation does not yield one-to-one match between old and new "farfield" patch at the time of mapping. The original tutorial does not do that either, but the difference is smaller which is not enough to induce instability to the case. The reason for this mismatch seems to originate due to Laplacian deformation is not moving the top boundary faces as much as the actual cone moves (expected, because that's how the laplacian mover works when the boundary condition is set to slip and you are a distance apart from the moving object). Then the new mesh is created by assuming that the patches move as much as the cone --> inconsistency. You can quantify this inconsistency by looking at the log file at the time of mapping, which shows that interpolating weights are not achieving high values. """ Creating AMI between source patch farField and target patch farField using faceAreaWeightAMI AMI: Creating addressing and weights between 28 source faces and 26 target faces AMI: Patch source sum(weights) min/max/average = 0.777143, 1, 0.995187 AMI: Patch target sum(weights) min/max/average = 0.685694, 1, 0.990178 """ |
|
I do not thing this is the issue as the interpolation weights are not much better when using velocityComponentLaplacian. For example at 0.0015 s, when the first interpolation takes place: Creating patchToPatch between source patch farField and target patch farField using intersection patchToPatch: Calculating couplings between 28 source faces and 26 target faces Source min/average/max coverage = 0.820431/0.996317/1 Target min/average/max coverage = 0.121718/0.972554/1 or Creating patchToPatch between source patch farFieldMoving and target patch farFieldMoving using intersection patchToPatch: Calculating couplings between 50 source faces and 50 target faces Source min/average/max coverage = 0.159923/0.969465/1 Target min/average/max coverage = 0.794586/0.995892/1 |
|
I think you are right that there is something else involved as well. I modified the mesh diffusion setup to achieve better interpolation result but still got a crash. Then I modified the cuttingPlane setup to write cutplanes every time step. By doing this you can see that after meshToMesh execution, the cone jumps far ahead in one time step. The "jump distance" is 0.0015m which is equal to displacement before meshToMesh execution. So I wonder if the displacement distance gets re-initialised to zero and then jumps immediately farther to respect the displacement boundary condition????? |
|
I have corrected the mesh geometry to make sure the wedge planes are exactly flat and changed the farFieldMoving to a fixed velocity which removes the NCC mapping error: commit f8bb763b2941fadf2385f27e1067eba93ee2de80 (HEAD -> master, origin/master, origin/HEAD) Author: Henry Weller <http://cfd.direct> Date: Thu Sep 15 18:48:24 2022 +0100 tutorials/modules/incompressibleFluid/movingCone: Corrected mesh and improved motion Now Courant Number mean: 0.0570316 max: 0.495054 Mapping to mesh meshToMesh_0.0015 Creating mesh-to-mesh addressing for region0 and meshToMesh_0.0015 regions using cellVolumeWeight Overlap volume: 1.73614e-09 Creating patchToPatch between source patch internal and target patch internal using intersection Creating patchToPatch between source patch movingWall and target patch movingWall using intersection patchToPatch: Calculating couplings between 85 source faces and 85 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 0.999998/1/1 Source average openness/error/depth/angle = 8.54039e-14/4.65177e-14/1.83621e-13/1.69031e-07 Source max openness/error/depth/angle = 1.80411e-12/9.02056e-13/1.87186e-12/1.20742e-06 272 couplings calculated in 0.006892s Creating patchToPatch between source patch farFieldMoving and target patch farFieldMoving using intersection patchToPatch: Calculating couplings between 50 source faces and 50 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 1/1/1 Source average openness/error/depth/angle = 4.49179e-15/5.39567e-15/1.23386e-15/0 Source max openness/error/depth/angle = 1.42087e-14/1.39586e-14/4.7574e-15/0 198 couplings calculated in 0.001874s Creating patchToPatch between source patch fixedWall and target patch fixedWall using intersection patchToPatch: Calculating couplings between 35 source faces and 35 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 1/1/1 Source average openness/error/depth/angle = 4.26705e-15/4.07481e-15/0/0 Source max openness/error/depth/angle = 1.32745e-14/2.28696e-14/0/0 70 couplings calculated in 0.003472s Creating patchToPatch between source patch axis and target patch axis using intersection Creating patchToPatch between source patch left and target patch left using intersection patchToPatch: Calculating couplings between 30 source faces and 30 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 0.999998/1/1 Source average openness/error/depth/angle = 8.3805e-15/1.06439e-14/8.61054e-15/0 Source max openness/error/depth/angle = 3.4769e-14/7.12727e-14/3.38172e-14/0 60 couplings calculated in 0.002874s Creating patchToPatch between source patch farField and target patch farField using intersection patchToPatch: Calculating couplings between 28 source faces and 26 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 1/1/1 Source average openness/error/depth/angle = 1.59949e-15/2.30267e-15/1.32775e-15/0 Source max openness/error/depth/angle = 8.50256e-15/6.44562e-15/3.61772e-15/0 104 couplings calculated in 0.001109s Creating patchToPatch between source patch back and target patch back using intersection patchToPatch: Calculating couplings between 1690 source faces and 1580 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 1/1/1 Source average openness/error/depth/angle = 1.23373e-08/6.1689e-09/1.33753e-07/3.84057e-07 Source max openness/error/depth/angle = 8.67157e-07/4.33579e-07/2.93014e-07/5.46682e-06 11698 couplings calculated in 0.202124s Creating patchToPatch between source patch front and target patch front using intersection patchToPatch: Calculating couplings between 1690 source faces and 1580 target faces Source min/average/max coverage = 1/1/1 Target min/average/max coverage = 1/1/1 Source average openness/error/depth/angle = 1.23373e-08/6.1689e-09/1.33753e-07/3.77789e-07 Source max openness/error/depth/angle = 8.67157e-07/4.33579e-07/2.93014e-07/5.46682e-06 11698 couplings calculated in 0.203408s |
|
Note that a simple displacement solver will not work with meshToMesh unless provision is made to reset the displacement to 0 after mapping as the motion restarts relative to the new mesh not the original mesh, of course. |
|
Makes sense. |
|
The displacementComponentLaplacian does not work reliably for this case but the velocityComponentLaplacian does which is why it was chosen. |
Date Modified | Username | Field | Change |
---|---|---|---|
2022-09-14 13:34 | heinten | New Issue | |
2022-09-14 13:34 | heinten | File Added: movingCone_displacement.zip | |
2022-09-14 14:53 | peksa | Note Added: 0012729 | |
2022-09-14 20:27 | heinten | Note Added: 0012730 | |
2022-09-15 14:19 | peksa | Note Added: 0012731 | |
2022-09-15 18:51 | henry | Note Added: 0012732 | |
2022-09-15 18:53 | henry | Note Added: 0012733 | |
2022-09-15 18:54 | henry | Priority | normal => low |
2022-09-15 18:54 | henry | Severity | crash => trivial |
2022-09-16 08:05 | peksa | Note Added: 0012738 | |
2022-09-16 09:59 | henry | Assigned To | => henry |
2022-09-16 09:59 | henry | Status | new => closed |
2022-09-16 09:59 | henry | Resolution | open => no change required |
2022-09-16 09:59 | henry | Note Added: 0012739 |