CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Pre-Processing

Issues in setting up cyclic boundary condition for wind turbine

Register Blogs Community New Posts Updated Threads Search

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   September 26, 2023, 12:03
Default Issues in setting up cyclic boundary condition for wind turbine
  #1
New Member
 
Niall O'Neill
Join Date: Feb 2023
Posts: 21
Rep Power: 3
nialloneill is on a distinguished road
Hello,

I am simulating a wind turbine rotor. Due to computational constraints I am trying to halve the domain through the rotational axis and apply a cyclic condition.

I have attached an image of the computational domain below. The bottom face is actually 2 separate .stl files to represent the left periodic and right periodic face. Given that these files were imported in the SHM dictionary and not blockMesh, I am finding it very difficult to define them as cyclic boundaries.

The way that I have been doing this was simply to use the 'createPatchDict'

Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2306                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      createPatchDict;
}

// This application/dictionary controls:
// - optional: create new patches from boundary faces (either given as
//   a set of patches or as a faceSet)
// - always: order faces on coupled patches such that they are opposite. This
//   is done for all coupled faces, not just for any patches created.
// - optional: synchronise points on coupled patches.

// 1. Create cyclic:
// - specify where the faces should come from
// - specify the type of cyclic. If a rotational specify the rotationAxis
//   and centre to make matching easier
// - always create both halves in one invocation with correct 'neighbourPatch'
//   setting.
// - optionally pointSync true to guarantee points to line up. 

// 2. Correct incorrect cyclic:
// This will usually fail upon loading:
//  "face 0 area does not match neighbour 2 by 0.0100005%"
//  " -- possible face ordering problem."
// - in polyMesh/boundary file:
//      - loosen matchTolerance of all cyclics to get case to load
//      - or change patch type from 'cyclic' to 'patch'
//        and regenerate cyclic as above

// Do a synchronisation of coupled points after creation of any patches.
// Note: this does not work with points that are on multiple coupled patches
//       with transformations (i.e. cyclics).
pointSync false;

// Patches to create.
patches
(
    {   
        // Name of new patch
        name cyc_half0;

        // Dictionary to construct new patch from
        patchInfo
        {   
            type cyclic;
            neighbourPatch cyc_half1;

            // Optional: explicitly set transformation tensor.
            // Used when matching and synchronising points.
            transform rotational;
            rotationAxis (0 1 0);
            rotationCentre (0.302438 -0.006962 0);

            // Optional non-default tolerance to be able to define cyclics
            // on bad meshes
            matchTolerance 1E-2;
        }

        // How to construct: either from 'patches' or 'set'
        constructFrom patches;

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (leftperiodic);

    }
    {
        // Name of new patch
        name cyc_half1;

        // Dictionary to construct new patch from
        patchInfo
        {
            type cyclic;
            neighbourPatch cyc_half0;

            // Optional: explicitly set transformation tensor.
            // Used when matching and synchronising points.
            transform rotational;
            rotationAxis (0 1 0);
            rotationCentre (0.302438 -0.006962 0);
            matchTolerance 1E-2;
        }

        // How to construct: either from 'patches' or 'set'
        constructFrom patches;

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (rightperiodic);

        // If constructFrom = set : name of faceSet

    }
);
Followed by

Code:
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  3.0.x                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
|*---------------------------------------------------------------------------*|
|  File created by CFD support s.r.o., Wed Feb  1 13:46:42 2017               |
|                    http://www.cdfsupport.com                                |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     3.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      changeDictionaryDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

boundary
    {
   
    leftperiodic
    {
        type            cyclic;
        neighbourPatch	rightperiodic;
    }
    rightperiodic
    {
        type            cyclic;
        neighbourPatch	leftperiodic;
    }
}
But this ended up creating 4 new boundaries.

Then I skipped the createPatchDict and just changed the boundary dictionary, but I recieved the following error message:
"For patch leftperiodic there are 14627 face centres, for the neighbour patch rightperiodic there are 14573"

I also tried using cyclicAMI conditions in case the accuracy was an issue but I still got the same error.

I haven't managed to find any examples online of cases where people have used rotational cyclic conditions like this, and I'm assuming there is just something inherently wrong with the way that I am trying to do this, so If anyone has experience in using these sort of boundary conditions and could help me figure it out that would be much appreciated. Perhaps splitting the two faces as separate stls is not a wise thing to do and there is an easier option.

Thanks.
Attached Images
File Type: jpg Computational Domain.jpg (129.6 KB, 11 views)
nialloneill is offline   Reply With Quote

Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Question about different kinds of Boundaries and Boundary Conditions granzer Main CFD Forum 17 April 12, 2022 17:27
Table bounds warnings at: END OF TIME STEP CFXer CFX 4 July 16, 2020 23:44
Problem of boundary condition setting for natural convection in a water tank haiteng FLUENT 2 June 25, 2020 04:04
Cyclic boundary condition / length setting? Kina OpenFOAM Pre-Processing 0 March 30, 2016 02:11
Boundary condition setting for non-premixed combustion using reactingFoam skyopener OpenFOAM 0 May 23, 2010 22:55


All times are GMT -4. The time now is 05:15.