diff --git a/applications/solvers/combustion/plasmaReactingFoam/readTimeControls.H b/applications/solvers/combustion/plasmaReactingFoam/readTimeControls.H index 60f0ed70..78522b1e 100644 --- a/applications/solvers/combustion/plasmaReactingFoam/readTimeControls.H +++ b/applications/solvers/combustion/plasmaReactingFoam/readTimeControls.H @@ -38,4 +38,33 @@ scalar maxCo = scalar maxDeltaT = runTime.controlDict().lookupOrDefault("maxDeltaT", GREAT); + + + +const dictionary pulseTimeStepDict = runTime.controlDict().subOrEmptyDict("pulseTimeStep"); + +const bool pulseTimeStep = !pulseTimeStepDict.empty(); + +const scalar pulseFrequency = // default 20 kHz + pulseTimeStepDict.lookupOrDefault("pulseFrequency", 20e3); + +const scalar pulseDuration = // default 12 ns + pulseTimeStepDict.lookupOrDefault("pulseDuration", 12e-9); + +const label nStepPulse = // default 1 + ceil(pulseTimeStepDict.lookupOrDefault("nStepPulse", 1)); + +const label nStepIdle = // default 1 + ceil(pulseTimeStepDict.lookupOrDefault("nStepIdle", 1)); + +const scalar pulsePeriod = 1 / pulseFrequency; +const scalar pulseTime = 2*pulseDuration; +const scalar idleTime = pulsePeriod - pulseTime; + +const scalar deltaTpulse = pulseTime / nStepPulse; +const scalar deltaTidle = idleTime / nStepIdle; + +{ +} + // ************************************************************************* // diff --git a/applications/solvers/combustion/plasmaReactingFoam/setDeltaT.H b/applications/solvers/combustion/plasmaReactingFoam/setDeltaT.H index ef453d89..8a289574 100644 --- a/applications/solvers/combustion/plasmaReactingFoam/setDeltaT.H +++ b/applications/solvers/combustion/plasmaReactingFoam/setDeltaT.H @@ -31,7 +31,40 @@ Description \*---------------------------------------------------------------------------*/ -if (adjustTimeStep) +if (pulseTimeStep) +{ + const scalar t = runTime.timeOutputValue(); + const scalar T = pulsePeriod; + const scalar neg_saw_t = (t - floor(t/T+1.)*T); + + const bool inPulse = neg_saw_t >= -pulseTime; + + if (inPulse) + { + runTime.setDeltaT (deltaTpulse); + Info<< "deltaT to proceed the pulse time " << endl; + } + else + { + const scalar eta = - pulseTime - neg_saw_t; + + if (eta >= deltaTidle) + { + runTime.setDeltaT (deltaTidle); + Info<< "deltaT to proceed the idle time " << endl; + } + else + { + runTime.setDeltaT (deltaTpulse); + Info<< "deltaT to the start of the pulse " << endl; + } + + } + + + Info<< "deltaT = " << runTime.deltaTValue() << endl; +} +else if (adjustTimeStep) { scalar maxDeltaTFact = maxCo/(CoNum + SMALL); scalar deltaTFact = min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);