bug 4505 fix 95/995/4
Serge Steer [Fri, 11 Jun 2010 14:17:02 +0000 (16:17 +0200)]
Change-Id: I467fec0c8861b7b356c49003e9e5e7b4d70e4631

scilab/CHANGES_5.3.X
scilab/modules/cacsd/macros/bode.sci
scilab/modules/cacsd/tests/nonreg_tests/bug_4505.dia.ref [new file with mode: 0644]
scilab/modules/cacsd/tests/nonreg_tests/bug_4505.tst [new file with mode: 0644]

index 2b4c7c0..c5361d4 100644 (file)
@@ -600,6 +600,8 @@ Bug fixes:
 
 * bug 4493 fixed - 'rat' moved in elementary_functions module.
 
+* bug 4505 fixed - A red vertical bar appeared for some continuous time systems.
+
 * bug 4572 fixed - Scilab did a SIGSEGV after stacksize('max') + stacksize().
 
 * bug 4583 fixed - Default value for string array assignment was " " instead
index 4d7a25e..27fc1c2 100644 (file)
@@ -1,5 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) INRIA Serge Steer
+// Copyright (C)  1985-2010 - INRIA - Serge Steer
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
@@ -15,9 +15,11 @@ function []=bode(varargin)
   end
   fname="bode";//for error messages
   fmax=[]
+  discr=%f //for shannon limit
   if or(typeof(varargin(1))==["state-space" "rational"]) then
     //sys,fmin,fmax [,pas] or sys,frq
     refdim=1 //for error message
+    discr=varargin(1).dt<>'c';
     if rhs==1 then //sys
       [frq,repf]=repfreq(varargin(1),1d-3,1d3)
     elseif rhs==2 then //sys,frq
@@ -102,7 +104,7 @@ function []=bode(varargin)
     datatipInitStruct(e.children(i),"formatfunction","formatBodeMagTip")
   end
 
-  if fmax<>[]&max(frq)<fmax then
+  if discr&fmax<>[]&max(frq)<fmax then
     xpoly(max(frq)*[1;1],axes.y_ticks.locations([1 $]));e=gce();
     e.foreground=5;
   end
@@ -128,7 +130,7 @@ function []=bode(varargin)
     datatipInitStruct(ephi.children(i),"formatfunction","formatBodePhaseTip")
   end
 
-  if fmax<>[]&max(frq)<fmax then
+  if discr&fmax<>[]&max(frq)<fmax then
     xpoly(max(frq)*[1;1],axes.y_ticks.locations([1 $]));e=gce();
     e.foreground=5;
   end
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_4505.dia.ref b/scilab/modules/cacsd/tests/nonreg_tests/bug_4505.dia.ref
new file mode 100644 (file)
index 0000000..6879b5c
--- /dev/null
@@ -0,0 +1,41 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 -INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 4505 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4505
+//
+// <-- Short Description -->
+//  A red vertical bar appeared  for some bode plots of continuous time systems.
+//check there is not Shannon limit curve for continuous systems
+sys=syslin('c',1/(1+%s))
+ sys  =
+      1     
+    -----   
+    1 + s   
+clf();bode(sys,0.001,1000)
+f=gcf();
+a_phase=f.children(1);
+a_modulus=f.children(2);
+phase_curves=a_phase.children;
+if size(phase_curves,'*')<>1 then bugmes();quit;end
+modulus_curves=a_modulus.children;
+if size(modulus_curves,'*')<>1 then bugmes();quit;end
+//check there is  Shannon limit curve for discrete systems
+sys=dscr(sys,0.01);
+clf();bode(sys,0.001,1000)
+ATTENTION : calfrq : Les fréquences supérieures à la fréquence de Nyquist sont ignorées.
+f=gcf();
+a_phase=f.children(1);
+a_modulus=f.children(2);
+phase_curves=a_phase.children;
+if size(phase_curves,'*')<>2 then bugmes();quit;end
+if or(size(phase_curves(1).data)<>[2 2]) then bugmes();quit;end
+modulus_curves=a_modulus.children;
+if size(modulus_curves,'*')<>2 then bugmes();quit;end
+if or(size(modulus_curves(1).data)<>[2 2]) then bugmes();quit;end
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_4505.tst b/scilab/modules/cacsd/tests/nonreg_tests/bug_4505.tst
new file mode 100644 (file)
index 0000000..d605568
--- /dev/null
@@ -0,0 +1,39 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 -INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 4505 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4505
+//
+// <-- Short Description -->
+//  A red vertical bar appeared  for some bode plots of continuous time systems.
+
+
+//check there is not Shannon limit curve for continuous systems
+sys=syslin('c',1/(1+%s))
+clf();bode(sys,0.001,1000)
+f=gcf();
+a_phase=f.children(1);
+a_modulus=f.children(2);
+phase_curves=a_phase.children;
+if size(phase_curves,'*')<>1 then pause,end
+modulus_curves=a_modulus.children;
+if size(modulus_curves,'*')<>1 then pause,end
+
+//check there is  Shannon limit curve for discrete systems
+sys=dscr(sys,0.01);
+clf();bode(sys,0.001,1000)
+f=gcf();
+a_phase=f.children(1);
+a_modulus=f.children(2);
+phase_curves=a_phase.children;
+if size(phase_curves,'*')<>2 then pause,end
+if or(size(phase_curves(1).data)<>[2 2]) then pause,end
+modulus_curves=a_modulus.children;
+if size(modulus_curves,'*')<>2 then pause,end
+if or(size(modulus_curves(1).data)<>[2 2]) then pause,end