Hello, I've looked into the problem of finding the currents in a circuit, on the minimalistic simulator branch.
Because I couldn't understand the existing code, I've looked at the previous, working version. There the following is the idea: - solve the circuit with modified nodal analysis - after having a solution, calculate the currents in the following way: - call a calculateCurrents() method on all the elements. This way the currents flowing from the elements into the CNodes are calculated, but they are stored in the elements. The CNodes are not a good storage for the currents, because one CNode is associated with more elements. See the orignal method, for a resistance, here, at the end of the file: http://ktechlab.svn.sourceforge.net/viewvc/ktechlab/branches/ktechlab-0.3.7/src/electronics/simulation/resistance.cpp?revision=172&view=markup - next, these values for currents are tranferred from the elements, to the pins, by the component::setNodelCurrents() method, line 152: http://ktechlab.svn.sourceforge.net/viewvc/ktechlab/branches/ktechlab-0.3.7/src/electronics/component.cpp?revision=172&view=markup From there, calculating the currents throught the wires is easy. So, in order to have a reliable current calculation, I'd like to apply the ideas from the version 0.3.7. The following changes are needed: - add a method to Element: double nodeCurrent(int nodeNumber) const ; and implement it, by using a doube m_nodeCurrent[4]; protected member. - in all the lements, updaete the m_nodeCurrent member, in the updateCurrents() method, instead of updating the node currents. As explained earlier, the node currents will get updated by many elements, so setting the current there is meaningless. - add a double sourceCurrent() const; method to the Pin class, and a setter method for it. The returned value should be interpreted as the current flowing from the element into the pin. If the pin has no attached element, then this value must be 0. A currentIsKnown() method already exists, so that can be also reused. - i don't really understand why is the ElementMap a separate class. Maybe someone can explain it. That class is a helper for Element, that connects the Element to Pins. Wouldn't it be more simple to make the element aware of pins? I won't research that, but a wrapper class is needed that sets up an element and tranfers the value of currents into the pins. - after having all these in place, the void Circuit::updateCurrents() method could be updated such that calculate all the currents flowing from the elements in the pins, and also all the currents flowing through the wires. Any comments, ideas and suggestions are welcome. Zoltan ------------------------------------------------------------------------------ Virtualization is moving to the mainstream and overtaking non-virtualized environment for deploying applications. Does it make network security easier or more difficult to achieve? Read this whitepaper to separate the two and get a better understanding. http://p.sf.net/sfu/hp-phase2-d2d _______________________________________________ Ktechlab-devel mailing list Ktechlab-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ktechlab-devel