OpenFOAMv1706で出たエラーとその原因・対処法
エラー内容
新しい乱流モデルを実装し,コンパイルが通ったので計算を回したところ,計算が落ちた
log.pimpleFOAMを見ると次のようなエラーが出ていた
/*---------------------------------------------------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1706 |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
Build : v1706
Arch : "LSB;label=64;scalar=64"
Exec : pimpleFoam -parallel
Date : Nov 22 2021
Time : 13:22:42
Host : "XX"
PID : XXX
Case : /home/XX/OpenFOAM/XX-v1706/CaseName
nProcs : 36
Slaves :
35
(
:
)
Pstream initialized with:
floatTransfer : 0
nProcsSimpleSum : 0
commsType : nonBlocking
polling iterations : 0
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time
Create mesh for time = 0
PIMPLE: Operating solver in PISO mode
Reading field p
Reading field U
Reading/calculating face flux field phi
Selecting incompressible transport model Newtonian
Selecting turbulence model type LES
Selecting LES turbulence model XXX
Selecting LES delta type YYY
[4] #0 Foam::error::printStack(Foam::Ostream&)[3] #0 Foam::error::printStack(Foam::Ostream&)[12] #0 [20] #0 [26] #0 Foam::error::printStack(Foam::Ostream&)[10] #0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[7] #0 Foam::error::printStack(Foam::Ostream&)[9] #0 [11] #0 Foam::error::printStack(Foam::Ostream&)[15] #0 Foam::error::printStack(Foam::Ostream&)[16] #0 [17] #0 Foam::error::printStack(Foam::Ostream&)[18] #0 Foam::error::printStack(Foam::Ostream&)[19] #0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[22] #0 Foam::error::printStack(Foam::Ostream&)[24] #0 Foam::error::printStack(Foam::Ostream&)[25] #0 Foam::error::printStack(Foam::Ostream&)[27] #0 [28] #0 Foam::error::printStack(Foam::Ostream&)[30] #0 Foam::error::printStack(Foam::Ostream&)[31] #0 Foam::error::printStack(Foam::Ostream&)[32] #0 [33] #0 Foam::error::printStack(Foam::Ostream&)[34] #0 Foam::error::printStack(Foam::Ostream&)[35] #0 Foam::error::printStack(Foam::Ostream&)[0] #0 Foam::error::printStack(Foam::Ostream&)[1] #0 Foam::error::printStack(Foam::Ostream&)[5] #0 [6] #0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[29] #0 Foam::error::printStack(Foam::Ostream&)[8] #0 Foam::error::printStack(Foam::Ostream&)[13] #0 Foam::error::printStack(Foam::Ostream&)[14] #0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[21] #0 Foam::error::printStack(Foam::Ostream&)[23] #0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[2] #0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)
--------------------------------------------------------------------------
(中略)
--------------------------------------------------------------------------
at ??:?
at ??:?
[22] #1 Foam::sigSegv::sigHandler(int)[12] #1 Foam::sigSegv::sigHandler(int) at ??:?
[24] #1 Foam::sigSegv::sigHandler(int) at ??:?
[26] #1 Foam::sigSegv::sigHandler(int) at ??:?
[14] #1 Foam::sigSegv::sigHandler(int) at ??:?
[29] #1 Foam::sigSegv::sigHandler(int) at ??:?
[6] #1 Foam::sigSegv::sigHandler(int) at ??:?
[2] #1 Foam::sigSegv::sigHandler(int) at ??:?
[28] #1 Foam::sigSegv::sigHandler(int) at ??:?
[1] #1 Foam::sigSegv::sigHandler(int) at ??:?
[9] #1 Foam::sigSegv::sigHandler(int) at ??:?
(以下,無限に続くエラー文)
原因
調べたところ,セグメンテーション違反らしい
SIGSEGV
Signal (IPC) - Wikipedia
The SIGSEGV signal is sent to a process when it makes an invalid virtual memory reference, or segmentation fault, i.e. when it performs a segmentation violation.[17]
ソースコードを調べたところ,.Cファイルで壁面距離y_
を宣言する前に粘性散逸率epsilon_
の初期化の計算で使ってしまっていた
epsilon_
(
IOobject
(
IOobject::groupName("epsilon", alphaRhoPhi.group()),
runTime_.timeName(),
mesh_,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
dimensionedScalar("zero",dimensionSet(0,2,-3,0,0,0,0),SMALL)
),
y_(wallDist::New(mesh_).y()),
対処法
epsilon_
とy_
の位置を入れ替えた
(.Cファイル)
y_(wallDist::New(mesh_).y()),
epsilon_
(
IOobject
(
IOobject::groupName("epsilon", alphaRhoPhi.group()),
runTime_.timeName(),
mesh_,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
dimensionedScalar("zero",dimensionSet(0,2,-3,0,0,0,0),SMALL)
),
(.Hファイル)
volScalarField epsilon_;
volScalarField wallDistance_;
コメント