This was the end of the tenth week, and we have entered the final phase of the project.

For the last phase we have Truss calculations to be implemented in the continuum_mechanics module. I had initiated a discussion regarding what needs to be done and how the implementation will move forward in an issue #17302. We will have to analyse a bit more about making Truss calculations symbolic and what benefits one might get in solving it symbolically. We have some good packages to compare from like this. I guess a bit more discussion is needed before we go ahead with it.

Besides this, I had worked on improving the **draw()** function implemented in the previous week in PR #17240. I modified it to use the **_backend** attribute for plotting the beam diagram. This could have worked until I realised that using the **_backend** attribute doesn’t really has affect the **Plot object. **To understand the last statement, lets go to how **sympy.plot() **works.

In simple terms, the equations that we pass through the **plot()** function as arguments are actually stored in** _series** attribute. So we can indirectly say that the basic data of the plot is stored in this attribute. But using the **_backend **attribute wouldn’t alter **_series **at all and if **_series **remains empty at the start it would end up storing nothing.

But we are of course getting a decent plot at the end, so shouldn’t we probably ignore this? No, it would surely give the plot but we won’t be getting a fully defined** Plot **object which we can further use with **PlotGrid** to get a subplot which includes all the five plots related to the beam.

Keeping this in mind, I tried an alternative way to directly use** sympy.plot() ** to give the plot. Although a bit hard and time taking to do, I have intiated this in a draft PR #17345. This PR perfectly plots a rectangular beam and loads (except point and moment loads). Only things that are left here are to plot supports and arrows denoting the direction of the load.

The example below shows how it functions: (keep in mind it just plots the basic structure of the intended beam diagram, it hasn’t been completed yet)

>>> E, I = symbols('E, I') >>> b = Beam(9, E, I) >>> b.apply_load(-12, 9, -1) # gets skipped >>> b.apply_load(50, 5, -2) # gets skipped >>> b.apply_load(3, 6, 1, end=8) >>> b.apply_load(4, 0, 0, end=5) >>> b.draw()

I also tried to complete the leftover PR’s in this week, but still some work is left.

**Next week:**

- Completing the
**draw()**function - Documentation and testing
- Starting Truss implementations

Will keep you updated!

Thanks!

## Leave a Reply