Steady-state CFD simulation of Honda's concept car (PUYO), Part 1 of 3 (Meshing)

Honda makes it possible for us to download the 3D data of their concept cars at http://honda-3d.com.

In this case, I downloaded the 3D data of PUYO, and performed a steady-state simulation using simpleFoam.

The 3D data is shown in the image below. They were originally one STL file, so I separated it into five STL files (four individual tyres, and the rest).


Again I used snappyHexMesh for grid generation. The resulting grid is as follows.




================================
checkMesh output:
Mesh stats
    points:           11600432
    faces:            31349018
    internal faces:   29711684
    cells:            9935106
    faces per cell:   6.145954
    boundary patches: 9
    point zones:      0
    face zones:       0
    cell zones:       0
Overall number of cells of each type:
    hexahedra:     8893104
    prisms:        222023
    wedges:        0
    pyramids:      0
    tet wedges:    558
    tetrahedra:    0
    polyhedra:     819421
    Breakdown of polyhedra by number of faces:
        faces   number of cells
            4   112192
            5   84808
            6   138818
            9   347424
           12   95924
           15   39493
           18   762
Checking topology...
    Boundary definition OK.
    Cell to face addressing OK.
    Point usage OK.
    Upper triangular ordering OK.
    Face vertices OK.
    Number of regions: 1 (OK).
Checking patch topology for multiply connected surfaces...
                   Patch    Faces   Points                  Surface topology
                   inlet     6272     6441  ok (non-closed singly connected)
                    side    31360    31725  ok (non-closed singly connected)
                  ground    50246    51500  ok (non-closed singly connected)
                  outlet     6272     6441  ok (non-closed singly connected)
                car_body  1360430  1472079  ok (non-closed singly connected)
             car_tyre_fl    45702    48864  ok (non-closed singly connected)
             car_tyre_fr    45723    48885  ok (non-closed singly connected)
             car_tyre_rl    45631    48762  ok (non-closed singly connected)
             car_tyre_rr    45698    48805  ok (non-closed singly connected)
Checking geometry...
    Overall domain bounding box (-8.5 -5 0.004954) (16.5 5 5.004954)
    Mesh (non-empty, non-wedge) directions (1 1 1)
    Mesh (non-empty) directions (1 1 1)
    Boundary openness (-7.541381e-16 6.348768e-16 -7.110857e-15) OK.
    Max cell openness = 5.000567e-16 OK.
    Max aspect ratio = 33.71477 OK.
    Minimum face area = 5.621661e-08. Maximum face area = 0.01597883.  Face area magnitudes OK.
    Min volume = 7.396851e-10. Max volume = 0.001424672.  Total volume = 1244.747.  Cell volumes OK.
    Mesh non-orthogonality Max: 65.02195 average: 11.04075
    Non-orthogonality check OK.
    Face pyramids OK.
 ***Max skewness = 4.001563, 1 highly skew faces detected which may impair the quality of the results
  <<Writing 1 skew faces to set skewFaces
    Coupled point location match (average 0) OK.
Failed 1 mesh checks.
End
blockMeshDict:
convertToMeters 1;
vertices      
(
    (-8.5 -5 0.004954)
    (16.5 -5 0.004954)
    (16.5  5 0.004954)
    (-8.5  5 0.004954)
    (-8.5 -5 5.004954)
    (16.5 -5 5.004954)
    (16.5  5 5.004954)
    (-8.5  5 5.004954)
);
blocks        
(
    hex (0 1 2 3 4 5 6 7) (140 112 56) simpleGrading (1 1 1)
);
edges        
(
);
patches      
(
    patch inlet
    (
        (4 0 3 7)
    )
    patch side
    (
        (3 2 6 7)
        (7 4 5 6)
        (4 0 1 5)
    )
    wall ground
    (
        (0 1 2 3)
    )
    patch outlet
    (
        (5 1 2 6)
    )
);
mergePatchPairs
(
);
snappyHexMeshDict:
castellatedMesh true;
snap            true;
addLayers       false;
geometry
{
    puyo_body.stl
    {
        type triSurfaceMesh;
        name car_body;
    }
    puyo_tyre_fl.stl
    {
        type triSurfaceMesh;
        name car_tyre_fl;
    }
    puyo_tyre_fr.stl
    {
        type triSurfaceMesh;
        name car_tyre_fr;
    }
    puyo_tyre_rl.stl
    {
        type triSurfaceMesh;
        name car_tyre_rl;
    }
    puyo_tyre_rr.stl
    {
        type triSurfaceMesh;
        name car_tyre_rr;
    }
    refinementBox
    {
        type searchableBox;
        min (-2.5 -1.2 -0.1);
        max ( 9.0  1.2 1.5);
    }
};
castellatedMeshControls
{
    maxLocalCells 100000000;
    maxGlobalCells 100000000;
    minRefinementCells 0;
    maxLoadUnbalance 0; //0.1;
    nCellsBetweenLevels 4;
    // Explicit feature edge refinement
    features
    (
    );
    // Surface based refinement
    refinementSurfaces
    {
       "car_body"
        {
            // Surface-wise min and max refinement level
            level (5 5);
            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type wall;
                inGroups (car);
            }
        }
       "car_tyre_fl"
        {
            // Surface-wise min and max refinement level
            level (5 5);
            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type wall;
                inGroups (car);
            }
        }
       "car_tyre_fr"
        {
            // Surface-wise min and max refinement level
            level (5 5);
            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type wall;
                inGroups (car);
            }
        }
       "car_tyre_rl"
        {
            // Surface-wise min and max refinement level
            level (5 5);
            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type wall;
                inGroups (car);
            }
        }
       "car_tyre_rr"
        {
            // Surface-wise min and max refinement level
            level (5 5);
            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type wall;
                inGroups (car);
            }
        }
    }
    resolveFeatureAngle 30;
    // Region-wise refinement
    refinementRegions
    {
        refinementBox
        {
            mode inside;
            levels ((1E15 2));
        }
    }
    // Mesh selection
    locationInMesh (-3.1 0.1 1.1);
    allowFreeStandingZoneFaces true;
}


// Settings for the snapping.
snapControls
{
    nSmoothPatch 10;
    tolerance 2.0;
    nSolveIter 300;
    nRelaxIter 10;
    // Feature snapping
        nFeatureSnapIter 30;
        implicitFeatureSnap true;
        explicitFeatureSnap false;
        multiRegionFeatureSnap false;
}
meshQualityControls
{
    maxNonOrtho 65;
    maxBoundarySkewness 4; //20;
    maxInternalSkewness 4;
    maxConcave 80;
    minVol 1e-13;
    minTetQuality 1e-9;
    minArea -1;
    minTwist 0.02;
    minDeterminant 0.001;
    minFaceWeight 0.02;
    minVolRatio 0.01;
    minTriangleTwist -1;
    // Advanced
    nSmoothScale 4;
    errorReduction 0.75;
}
// Advanced
debug 0;
mergeTolerance 1E-6;

Comments