volkanozsarac / ModalAnalysis-OpenSeesPy

An example script used to perform modal analysis of an OpenSeesPy model.
GNU General Public License v3.0
14 stars 5 forks source link

Masses aren't as expected #3

Closed cslotboom closed 3 years ago

cslotboom commented 3 years ago

I have a model where using the modal analysis script I got a different mass than expected. I'm analyzing a floor plate, I expect my total mass to be ~9400kg. This is the sum of all of the masses I've applied.

However, when run the modal analysis, I'm getting a mass closer to 8000kg. image There could be something I'm missing - is this output expected to be the total mass?

For reference, here is my script FloorPlate.txt

volkanozsarac commented 3 years ago

Hey @cslotboom, it seems that you have assigned masses to restrained DOFs as well. Since the function uses the unrestrained part of the global mass matrix, the resultant total mass will be based on the masses assigned to unrestrained DOFs. if you try assigning masses solely to the unrestrained DOFs:

for ii in range(NeleX + 1):
    y = 0
    for jj in range(NeleY + 1):
        CurrentNode += 1
        ops.node(CurrentNode, x, y, 0.)
        ...
        # Finally add Mass      
        if not CurrentNode in fixednodes:
            ops.mass(CurrentNode,0.,0.,TempMass)
            totalmass += TempMass
         ...
print(totalmass)

you will see that nothing changes, eigenvalues, periods, and mass participation ratios. Total mass will be exactly the same as the one returned by the function.

Do you think we should calculate the total masses using all the DOFs? I am not sure if we are able to access directly the restrained part of the global mass matrix at the moment. The only way to get the masses assigned to the restrained DOFs is through ops.nodeMass option, however, if distributed masses are assigned to the elements, the function returns 0.

cslotboom commented 3 years ago

Aha. Yeah I see, that makes sense.

Based on what you've said, calculating the total mass sounds tricky - I wouldn't worry about that.

However, it might be worth changing the text to something like "Total Activated Mass", and adding a note about what "Activated Mass" means somewhere. If I missed it, there is going to be a bunch of people who will bug you about eventually haha

volkanozsarac commented 3 years ago

Yes, unfortunately, I could not find a direct way, the total mass is a bit tricky, and I am not sure if it is even necessary. I have tried to mention it in the description of the function. Yet, I agree that it is not clear and I will change the output text to "Total Activated Masses" following your suggestion.

By the way, from little research, I've figured out that the commercial software either use the center of mass on each plane or origin point while calculating masses and associated participation factors in rotational excitation directions. It seems that the choice of the reference point is not clear for those calculations. I could not find a meaningful explanation regarding this choice, yet. So, I am thinking to improve the code using one of these options in the future, what do you think?

Cheers, Volkan

cslotboom commented 3 years ago

Hey Volkan,

I agree, probably not necessary as long as we are clear.

Regarding mass participation ratios, right now your guess is better than mine - I would have to research it! I think that sounds good. Do you expect that this choice will affect the results significantly?

Where we are uncertain, I generally suggest that we would use data/results to guide us. It can be a lot of work, but if needed we can compare results of both methods to each-other. We can also compare those results to other commercial packages if needed. Having these positive results can make us and others more confident in the work!

Best, Christian

volkanozsarac commented 3 years ago

Yup, in fact, I made comparisons for commercial software. You may have look at the test models (Bridge3d) I have used. image It is written that Seismostruct uses the mass centroid of the structure, unfortunately, this is not clear for SAP2000, I could not find much on that. image