In the model attached, the updateMaterialStage is still after the gravity analysis...
No, it is before the analysis, it is after the loads, but before the analysis. If it is before or after the application of loads does not change anything, the only important thing is that it is before the analysis.

- before.png (13.66 KiB) Viewed 5844 times
I have run the analysis and my curve reaches 0.26 of displacement while in your model it reaches at least 0.38
Actually, I stopped it at 0.38.. but it was converging fine. If your model is not converging, and you did no change on the model I sent you, make sure you are using the latest OpenSees version. I'm using the one hosted on Prof. Tarque's website (OpenSees-Solvers-3.2.2)
I thought that this was a way to link the soil to the nodes of the walls. I am going to change them into Eqdof links. However, there is a friction contact between the walls and the soil...I havent come up with an idea to model that and it was just an initial approach. But thanks for that, you are right about this.
If you change them with EDOF, then you are doing a perfect connection. If instead, you want to simulate frictional contact, you can use the zeroLengthContact element or other contact elements. In both cases, I would subdivide the soil geometry so that is is alligned with the beams that are in contact, otherwise the links will not be alligned, and won't give you accurate results.
Have you checked what I mentioned about the similar curves that I obtained for the stiff and soft clays? Do you think that are those values real? I am gonna try to run the code in OpenSees to check that... I dont know... it seems weird to me.
I did test only the material parametetrs you put in the file, however looking at the output (material.stress) of your Py zeroLength, they were fully in plastic stage... What I meant is that you can change your soil properties as you want, but if the Py spring fails, it will be the one that determines the output of the analysis.
Also, how did you define the pushover curve in STKO in the postprocessor window? Maybe that's another thing that I am not doing right... I thought that in displacement control analysis, the load that you apply is the pseudo time step... But I have seen that in your plot, you considered different variables (Sum(RFx) and Ux).
In the Displacement Control, the pseudo-time is the Load multiplier. In your case, the sum of the nodal forces at the diaphragms is 1, so yes, the load multiplier will also be equal to the total force.
I simply did it in another (equivalent) way, I extracted both the displacement at the top node, and the reaction forces (Sum operation) at all the fixed dofs.
Another nice feature is the monitor Analysis step. It basically allows you to plot something in real time while the analysis is running.
Check our webinars for that feature. A webinar where I used it, was the out of plane failure of masonry walls with micro modelling