Axisymmetric blockMeshDict: FOAM FATAL ERROR: клин... центральная плоскость не выравнивается с координатной плоскостью
Я пытаюсь следовать этому руководству, чтобы создать осесимметричную модель ниже:
После обсуждения здесь мой blockMeshDict
файл:
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
convertToMeters 0.001;
wa 5.0;
cr 10.0;
pr 8.0;
cl 50.0;
px 20.0;
pl 10.0;
px2 #calc "$px+$pl";
ms 50;
vertices
(
(0 0 0) //00
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" 0) //01
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" 0) //02
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" $px) //03
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" $px) //04
(0 0 $px) //05
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" $px) //06
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" 0) //07
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" 0) //08
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" $px) //09
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" $px2) //10
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" $px2) //11
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" $px2) //12
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" $px2) //13
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" $cl) //14
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" $cl) //15
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" $cl) //16
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" $cl) //17
(0 0 $cl) //18
(0 0 $px2) //19
);
blocks
(
hex (0 1 2 0 5 4 3 5) ($ms 1 $ms) simpleGrading (1 1 1)
hex (1 7 8 2 4 6 9 3) ($ms 1 $ms) simpleGrading (1 1 1)
hex (4 6 9 3 12 11 10 13) ($ms 1 $ms) simpleGrading (1 1 1)
hex (12 11 10 13 15 16 17 14) ($ms 1 $ms) simpleGrading (1 1 1)
hex (19 12 13 19 18 15 14 18) ($ms 1 $ms) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
inlet
{
type patch;
faces
(
(0 1 2 0)
(1 7 8 2)
);
}
outlet
{
type patch;
faces
(
(18 15 14 18)
(15 16 17 14)
);
}
walls
{
type wall;
faces
(
(7 8 9 6)
(6 9 10 11)
(11 10 17 16)
);
}
wedgeBack
{
type wedge;
faces
(
(0 1 4 5)
(1 7 6 4)
(4 6 11 12)
(12 11 16 15)
(19 12 15 18)
);
}
wedgeFront
{
type wedge;
faces
(
(0 2 3 5)
(2 8 9 3)
(3 9 10 13)
(13 10 17 14)
(19 13 14 18)
);
}
axis
{
type empty;
faces
(
(0 5 5 0)
(19 18 18 19)
);
}
);
mergePatchPairs
(
);
Но когда я бегу blockMesh
Я получаю предупреждения как:
Создание топологии блочной сетки -> Предупреждение FOAM: Из функции Foam::polyMesh::polyMesh(const Foam::IOobject&, const Foam::Xfer > >&, const cellShapeList&, const faceListList&, const wordList&, const Foam::PtrList&, const Foam::word&, const Foam::word&, bool) в файловых сетках /polyMesh/polyMeshFromShapeMesh.C в строке 871 Найдено 3 неопределенных грани в сетке; добавление патча по умолчанию.
с последующей ошибкой:
-> FOAM FATAL ERROR: центральная плоскость клина wedgeFront не выравнивается с координатной плоскостью на 0.360319 Из виртуальной функции vid Foam::wedgePolyPatch::calcGeometry(Foam::PstreamBuffers&) в сеточных файлах /polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.C в строке 98.
К сожалению, поиск сообщения об ошибке не дает много результатов. Буду признателен, если вы поможете мне узнать, в чем проблема и как я могу ее решить.
1 ответ
То, как вы вычисляете координаты точки, кажется мне довольно странным, например, каков параметр wa
должно означать? Кажется, ты хотел, чтобы это было под углом.
Мне удалось получить действительную сетку, изменив тип патча патчей клина на тип patch
, который является более прощающим, чем тип wegde
, Я делаю это часто при устранении неполадок blockMeshDicts.
Кроме того, я изменил порядок вершин в определении патча на входе. Список вершин в определении патча должен соответствовать "правилу правой руки", см. Руководство пользователя.
Для случаев, использующих осесимметричность, руководство пользователя рекомендует иметь небольшой угол клина, например, 1°, для осесимметричной области. Скорее всего, это причина вашей ошибки, заключающейся в том, что плоскость центра клина не выравнивается.
Таким образом, я предлагаю:
- Сохраняйте патчи клина как имеющие тип
patch
в настоящее время - Разберитесь с вашей геометрией, чтобы вы могли создать 1 ° срез геометрии
- Измените патч клина обратно на
wedge
, как только ваша геометрия среза 1 °
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
convertToMeters 0.001;
wa 4.0;
cr 10.0;
pr 8.0;
cl 50.0;
px 20.0;
pl 10.0;
px2 #calc "$px+$pl";
ms 50;
vertices
(
(0 0 0) //00
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" 0) //01
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" 0) //02
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" $px) //03
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" $px) //04
(0 0 $px) //05
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" $px) //06
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" 0) //07
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" 0) //08
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" $px) //09
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" $px2) //10
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" $px2) //11
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" $px2) //12
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" $px2) //13
(#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)" $cl) //14
(#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)" $cl) //15
(#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)" $cl) //16
(#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)" $cl) //17
(0 0 $cl) //18
(0 0 $px2) //19
);
blocks
(
hex (0 1 2 0 5 4 3 5) ($ms 1 $ms) simpleGrading (1 1 1)
hex (1 7 8 2 4 6 9 3) ($ms 1 $ms) simpleGrading (1 1 1)
hex (4 6 9 3 12 11 10 13) ($ms 1 $ms) simpleGrading (1 1 1)
hex (12 11 10 13 15 16 17 14) ($ms 1 $ms) simpleGrading (1 1 1)
hex (19 12 13 19 18 15 14 18) ($ms 1 $ms) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
inlet
{
type patch;
faces
(
(0 2 1 0)
(1 2 8 7)
);
}
outlet
{
type patch;
faces
(
(18 15 14 18)
(15 16 17 14)
);
}
walls
{
type wall;
faces
(
(7 8 9 6)
(6 9 10 11)
(11 10 17 16)
);
}
wedgeBack
{
type patch;
faces
(
(0 1 4 5)
(1 7 6 4)
(4 6 11 12)
(12 11 16 15)
(19 12 15 18)
);
}
wedgeFront
{
type patch;
faces
(
(0 2 3 5)
(2 8 9 3)
(3 9 10 13)
(13 10 17 14)
(19 13 14 18)
);
}
axis
{
type empty;
faces
(
(0 5 5 0)
(19 18 18 19)
);
}
);
mergePatchPairs
(
);