35 Foam::scalar Foam::engineValve::adjustCrankAngle(
const scalar theta)
const
37 if (theta < liftProfileStart_)
39 scalar adjustedTheta = theta;
41 while (adjustedTheta < liftProfileStart_)
43 adjustedTheta += liftProfileEnd_ - liftProfileStart_;
48 else if (theta > liftProfileEnd_)
50 scalar adjustedTheta = theta;
52 while (adjustedTheta > liftProfileEnd_)
54 adjustedTheta -= liftProfileEnd_ - liftProfileStart_;
68 Foam::engineValve::engineValve
73 const word& bottomPatchName,
74 const word& poppetPatchName,
75 const word& stemPatchName,
76 const word& curtainInPortPatchName,
77 const word& curtainInCylinderPatchName,
78 const word& detachInCylinderPatchName,
79 const word& detachInPortPatchName,
81 const graph& liftProfile,
83 const scalar minTopLayer,
84 const scalar maxTopLayer,
85 const scalar minBottomLayer,
86 const scalar maxBottomLayer,
92 engineDB_(refCast<const engineTime>(
mesh.
time())),
93 csysPtr_(valveCS.
clone()),
101 detachFaces_(detachFaces),
102 liftProfile_(liftProfile),
103 liftProfileStart_(
min(liftProfile_.x())),
104 liftProfileEnd_(
max(liftProfile_.x())),
106 minTopLayer_(minTopLayer),
107 maxTopLayer_(maxTopLayer),
108 minBottomLayer_(minBottomLayer),
109 maxBottomLayer_(maxBottomLayer),
114 Foam::engineValve::engineValve
123 engineDB_(refCast<const engineTime>(mesh_.time())),
136 curtainInCylinderPatch_
141 detachInCylinderPatch_
152 liftProfile_(
"theta",
"lift", name_,
dict.
lookup(
"liftProfile")),
153 liftProfileStart_(
min(liftProfile_.x())),
154 liftProfileEnd_(
max(liftProfile_.x())),
155 minLift_(
dict.
get<scalar>(
"minLift")),
156 minTopLayer_(
dict.
get<scalar>(
"minTopLayer")),
157 maxTopLayer_(
dict.
get<scalar>(
"maxTopLayer")),
158 minBottomLayer_(
dict.
get<scalar>(
"minBottomLayer")),
159 maxBottomLayer_(
dict.
get<scalar>(
"maxBottomLayer")),
160 diameter_(
dict.
get<scalar>(
"diameter"))
170 adjustCrankAngle(theta),
179 return lift(engineDB_.theta()) >= minLift_;
187 lift(engineDB_.theta()),
200 lift(engineDB_.theta() - engineDB_.deltaTheta()),
203 )/(engineDB_.deltaTValue() + VSMALL);
212 if (bottomPatch_.active())
214 mpIDs[nMpIDs] = bottomPatch_.index();
218 if (poppetPatch_.active())
220 mpIDs[nMpIDs] = poppetPatch_.index();
234 cs().writeEntry(coordinateSystem::typeName_(), os);
239 <<
"curtainInPortPatch " << curtainInPortPatch_.name()
241 <<
"curtainInCylinderPatch " << curtainInCylinderPatch_.name()
243 <<
"detachInCylinderPatch " << detachInCylinderPatch_.name()
245 <<
"detachInPortPatch " << detachInPortPatch_.name()