summaryrefslogtreecommitdiff
path: root/OSCAD/LPCSim/LPCSim/printSolution.sci
diff options
context:
space:
mode:
Diffstat (limited to 'OSCAD/LPCSim/LPCSim/printSolution.sci')
-rw-r--r--OSCAD/LPCSim/LPCSim/printSolution.sci182
1 files changed, 182 insertions, 0 deletions
diff --git a/OSCAD/LPCSim/LPCSim/printSolution.sci b/OSCAD/LPCSim/LPCSim/printSolution.sci
new file mode 100644
index 0000000..cfdbac1
--- /dev/null
+++ b/OSCAD/LPCSim/LPCSim/printSolution.sci
@@ -0,0 +1,182 @@
+// printSolution.sci is a scilab file to display solution of the circuit. It is developed for a scilab based circuit simulator. It is written by Yogesh Dilip Save (yogessave@gmail.com).
+// Copyright (C) 2012 Yogesh Dilip Save
+// This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+// You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+// It is modified by Yogesh Dilip Save for OSCAD Software on October 2012
+
+
+function printOPSolution(fileName,voltage,current,Wmode)
+ global g;
+ global nodeMap;
+ fid = mopen(fileName, Wmode);
+ if(fid == -1)
+ error("cannot open file for writing");
+ end
+ mfprintf(fid,'Name\t Source\t Sink\t Voltage\t Current\n');
+ mfprintf(fid,'----------------------------------------------------------\n');
+
+ Edges=edge_number(g);
+ edge_cnt=1;
+ while(edge_cnt<=Edges)
+ if(g.edges.data.type(edge_cnt)=='D'|g.edges.data.type(edge_cnt)=='X')
+ mfprintf(fid,'%c\t %s\t %s\t %15.10f %15.10f\n',g.edges.data.type(edge_cnt),nodeMap(g.edges.tail(edge_cnt)),nodeMap(g.edges.head(edge_cnt)),voltage(edge_cnt),current(edge_cnt)+current(edge_cnt+1));
+ edge_cnt=edge_cnt+2;
+ elseif(g.edges.data.type(edge_cnt)=='M')
+ mfprintf(fid,'%c\t %s\t %s\t %15.10f %15.10f\n',g.edges.data.type(edge_cnt),nodeMap(g.edges.tail(edge_cnt)),nodeMap(g.edges.head(edge_cnt)),voltage(edge_cnt),current(edge_cnt)+current(edge_cnt+1));
+ edge_cnt=edge_cnt+7;
+ else
+ mfprintf(fid,'%c\t %s\t %s\t %15.10f %15.10f\n',g.edges.data.type(edge_cnt),nodeMap(g.edges.tail(edge_cnt)),nodeMap(g.edges.head(edge_cnt)),voltage(edge_cnt),current(edge_cnt));
+ edge_cnt=edge_cnt+1;
+ end
+ end
+ mclose(fid);
+endfunction
+
+function initArrays(t_itr)
+ global vPrintArray; global vPlotArray;
+ global iPrintArray; global iPlotArray;
+ vPrintArray = zeros(t_itr,length(vPrintList)+1);
+ vPlotArray = zeros(t_itr,length(vPlotList));
+ iPrintArray = zeros(t_itr,length(iPrintList)+1);
+ iPlotArray = zeros(t_itr,length(iPlotList));
+endfunction
+
+function buildOutput(x,s,itr)
+ global vPrintList;
+ global iPrintList;
+ global sweepArray;
+ global vPrintArray;
+ global iPrintArray;
+ sweepArray(itr)=s;
+// Store voltage output for printing
+ if(~(vPrintList(1)==0))
+ fill_vPrintArray(x,itr);
+ vPrintArray(itr,1)=s;
+ end
+
+// Store voltage output for plotting
+ if(~(vPlotList(1)==0))
+ fill_vPlotArray(x,itr);
+ end
+
+// Store current output for printing
+ if(~(iPrintList(1)==0))
+ fill_iPrintArray(x,itr);
+ iPrintArray(itr,1)=s;
+ end
+
+// Store current output for plotting
+ if(~(iPlotList(1)==0))
+ fill_iPlotArray(x,itr);
+ end
+endfunction
+
+function fill_vPrintArray(x,i)
+ global vPrintList;
+ global vPrintArray;
+ for j=1:1:length(vPrintList);
+ if(length(vPrintList(j))==1)
+ if(vPrintList(j)<0)
+ vPrintArray(i,j+1)=-x((-vPrintList(j))-1);
+ else
+ vPrintArray(i,j+1)=x(vPrintList(j)-1);
+ end
+ elseif(length(vPrintList(j))==2)
+ mylist=vPrintList(j);
+ vPrintArray(i,j+1)=x(mylist(1)-1)-x(mylist(2)-1);
+ end
+ end
+endfunction
+
+function fill_vPlotArray(x,i)
+ global vPlotList;
+ global vPlotArray;
+ for j=1:1:length(vPlotList);
+ if(length(vPlotList(j))==1)
+ if(vPlotList(j)<0)
+ vPlotArray(i,j)=-x((-vPlotList(j))-1);
+ else
+ vPlotArray(i,j)=x(vPlotList(j)-1);
+ end
+ elseif(length(vPlotList(j))==2)
+ mylist=vPlotList(j);
+ vPlotArray(i,j)=x(mylist(1)-1)-x(mylist(2)-1);
+ end
+ end
+ clear mylist;
+endfunction
+
+function fill_iPrintArray(x,i)
+ global iPrintList;
+ global iPrintArray;
+ global g;
+ Nodes=node_number(g);
+ for j=1:1:length(iPrintList);
+ if(vPrintList(j)<0)
+ iPrintArray(i,j+1)=-x(-iPrintList(j)+Nodes-1);
+ else
+ iPrintArray(i,j+1)=x(iPrintList(j)+Nodes-1);
+ end
+ end
+endfunction
+
+function fill_iPlotArray(x,i)
+ global iPlotList;
+ global iPlotArray;
+ global g;
+ Nodes=node_number(g);
+ for j=1:1:length(iPlotList);
+ if(iPlotList(j)<0)
+ iPlotArray(i,j)=-x(-iPlotList(j)+Nodes-1);
+ else
+ iPlotArray(i,j)=x(iPlotList(j)+Nodes-1);
+ end
+ end
+endfunction
+
+function printSolution(xArray,xaxis,axisType);
+ global vPrintList; global vPlotList;
+ global iPrintList; global iPlotList;
+ global vPrintArray; global vPlotArray
+ global iPrintArray; global iPlotArray;
+ if(~(vPlotList(1)==0))
+ plot(xArray,vPlotArray);
+ for(i=1:size(vPlotArray,2))
+ temp=vPlotList(i);
+ for(j=1:size(temp,2))
+ if(j==1)
+ a(i)="v("+string(temp(j))+")";
+ else
+ a(i)=a(i)+"-v("+string(temp(j))+")";
+ end
+ end
+ end
+ legend(a);
+ xlabel(xaxis);
+ ylabel('voltage(V)');
+ end
+ if(~(vPrintList(1)==0))
+ disp(vPrintArray);
+ end
+ if(~(iPlotList(1)==0))
+ plot(xArray,iPlotArray);
+ for(i=1:size(iPlotArray,2))
+ temp=iPlotList(i);
+ disp(temp);
+ for(j=1:size(temp,2))
+ if(j==1)
+ a(i)="i("+string(temp(j))+")";
+ else
+ a(i)=a(i)+"-i("+string(temp(j))+")";
+ end
+ end
+ end
+ legend(a);
+ xlabel(xaxis);
+ ylabel('current(A)');
+ end
+ if(~(iPrintList(1)==0))
+ disp(iPrintArray);
+ end
+endfunction