From f15a92d997b00f8e54efc5bbdb9d04c9fdf766ad Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Wed, 12 Jun 2024 19:42:20 +0200 Subject: [PATCH] Revise commit https://sourceforge.net/p/ngspice/ngspice/ci/75c2a3c621c90228a82cbf5c0d00be19106025f1/ If the frquency difference is less than a decade, use the old frequency calculation. If start and stop frequencies are equal, use a single point only. --- src/spicelib/analysis/acan.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/spicelib/analysis/acan.c b/src/spicelib/analysis/acan.c index 1943a9576..e00fa41a0 100644 --- a/src/spicelib/analysis/acan.c +++ b/src/spicelib/analysis/acan.c @@ -86,8 +86,17 @@ ACan(CKTcircuit* ckt, int restart) fprintf(stderr, "ERROR: AC startfreq <= 0\n"); return E_PARMVAL; } - double num_steps = floor(fabs(log10(job->ACstopFreq / job->ACstartFreq)) * job->ACnumberSteps); - job->ACfreqDelta = exp((log(job->ACstopFreq / job->ACstartFreq)) / num_steps); + if (job->ACstopFreq / 10. < job->ACstartFreq) { + /* start-stop frequencies less than a decade apart */ + if (job->ACstopFreq == job->ACstartFreq) + job->ACfreqDelta = 1; + else + job->ACfreqDelta = exp(log(10.0) / job->ACnumberSteps); + } + else { + double num_steps = floor(fabs(log10(job->ACstopFreq / job->ACstartFreq)) * job->ACnumberSteps); + job->ACfreqDelta = exp((log(job->ACstopFreq / job->ACstartFreq)) / num_steps); + } break; case OCTAVE: