Unit netwerk; { This software has been designed and it is CopyLefted by Han de Bruijn: (===) @-O^O-@ #/_\# ### } INTERFACE Uses Numeriek; procedure rekenen(naam1,naam2 : string); IMPLEMENTATION var FEM : Numerical; procedure rekenen(naam1,naam2 : string); const NUL : double = 1.E-9; var invoer : TextFile; nr1,nr2,k,no1,no2 : integer; waarde,W,stroom,volt : double; begin { DataFile for Resistors Network ------------------------------ Column 1 : Number of vertex 1 Column 2 : Number of vertex 2 Column 3 : Resistor magnitude First Pass bulk } AssignFile(invoer,naam1); Reset(invoer); FEM.nn := 0; FEM.nb1 := 0; SetLength(FEM.nr,2); while not EoF(invoer) do begin Readln(invoer,nr1,nr2); FEM.nr[0] := nr1; FEM.nr[1] := nr2; FEM.Layout; end; Writeln('# unknowns = ',FEM.nn); Writeln('bandwidth = ',FEM.nb1); { Second Pass bulk } FEM.Globaal_nul; FEM.Element_nul(2); Reset(invoer); Writeln('Resistors:'); FEM.r[0] := 0; while not EoF(invoer) do begin Readln(invoer,nr1,nr2,waarde); Writeln(nr1:5,nr2:5,waarde:10:5); if waarde = 0 then waarde := NUL; FEM.nr[0] := nr1; FEM.nr[1] := nr2; W := 1/waarde; FEM.e[0][0] := W; FEM.e[1][1] := W; FEM.e[0][1] := -W; FEM.e[1][0] := -W; FEM.Intellen; end; CloseFile(invoer); { DataFile for Power Source ------------------------- Column 1 : Number of vertex 1 with Voltage = 0 (ground) Column 2 : Number of vertex 2 Column 3 : Voltage of source Boundary conditions oneliner } FEM.Element_nul(1); SetLength(FEM.nr,1); Writeln('Prescribed:'); FEM.e[0][0] := 1; AssignFile(invoer,naam2); Reset(invoer); { One line } Readln(invoer,no1,no2,volt); Writeln(no1:5,no2:5,volt:10:5); CloseFile(invoer); FEM.nr[0] := no1; FEM.r[0] := 0; { Earth } FEM.Randvoorwaarde; FEM.nr[0] := no2; FEM.r[0] := volt; FEM.Randvoorwaarde; FEM.Oplossen; Writeln('Voltages:'); for k := 0 to FEM.nn-1 do begin Writeln(k+1:5,FEM.b[k]:10:5); end; { Third Pass bulk } AssignFile(invoer,naam1); Reset(invoer); Writeln('Amperages:'); W := 0; while not EoF(invoer) do begin Readln(invoer,nr1,nr2,waarde); if waarde = 0 then waarde := NUL; stroom := (FEM.b[nr1-1]-FEM.b[nr2-1])/waarde; W := W + stroom*(FEM.b[nr1-1]-FEM.b[nr2-1]); Writeln(nr1:5,nr2:5,stroom:10:5); end; CloseFile(invoer); Writeln(no2:5,no1:5,W/volt:10:5); Writeln('Resistance:'); Writeln(no2:5,no1:5,sqr(volt)/W:10:5); Writeln('Dissipation = ',W:10:5); end; END.