Static step when using HHT integration

19 views
Skip to first unread message

Samyog

unread,
Aug 14, 2020, 8:51:39 PM8/14/20
to mastodon-users
Hi all,

Can one use different alpha (of HHT integration) value during different time-steps in analysis?

Context:
I want to use non-zero alpha value for a problem. For the static step of that problem, I disable inertial objects using controls block and zeta is set to zero but I am not sure how to set alpha = 0 during my static step only.

Thank you
Samyog

Swetha Veeraraghavan

unread,
Aug 15, 2020, 10:14:21 AM8/15/20
to mastodon-users
Hi Samyog,

If you set "_static_initialization = true" in the DynamicTensorMechanics block, it will not use _zeta or _alpha for the first time step. So, this should work if you are running the static step for just the first time step. This way you would be able to provide any value of _zeta and _alpha in the input file and it would not affect your result. Check this test for more details.

_alpha currently cannot be changed during the simulation.

Regards,
Swetha

--
https://mooseframework.org/mastodon
https://github.com/idaholab/mastodon
---
You received this message because you are subscribed to the Google Groups "mastodon-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mastodon-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/mastodon-users/dc4cb8e2-333e-4780-af57-e9b84777392bo%40googlegroups.com.

Samyog

unread,
Aug 15, 2020, 11:25:40 AM8/15/20
to mastodon-users
Hello Dr. Swetha,

I could not make it work with non-zero alpha. There are very small acceleration jitters. Does static initialization also set alpha to zero for static step?


What I did in the test file:
Defined Globalparams block and defined alpha = -0.3, beta = 0.4225 and gamma = 0.8, commented out all other beta and gamma. Removed prescribed displacement and ran the analysis.


Thank you
Samyog

Swetha Veeraraghavan

unread,
Aug 15, 2020, 12:49:43 PM8/15/20
to mastodon-users
Hi Samyog,

Yes, static initialization works for alpha as well.

The test uses a zero alpha but the same procedure works for non-zero alpha as well. There is an if statement in DynamicStressDivergenceTensors (lines 64-88) that just computes K*u at the first time step if static initialization is set to true, and then includes the rayleigh damping and hht effects for other time steps.

The jitters in acceleration are in the test file that I sent you (when you use zero alpha and turn off prescribed displacement)? and how small are the jitters? This may have to do with tolerances. As you reduce the tolerance, the static solution gets better and the accelerations decrease.

In larger models, I have sometimes had to run the static step, i.e., switching off inertia kernels and rayleigh/hht damping for 5-6 time steps before the static solution reaches a small enough value. In these situations, I usually just go to line 64 in DynamicStressDivergenceTensors.C and change _t==_dt to _t<6*_dt, and set the end_time in the controls block of the input file to 0.5 (5 timesteps) instead of 0.1.

Regards,
Swetha

--
https://mooseframework.org/mastodon
https://github.com/idaholab/mastodon
---
You received this message because you are subscribed to the Google Groups "mastodon-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mastodon-user...@googlegroups.com.

Samyog

unread,
Aug 15, 2020, 2:04:19 PM8/15/20
to mastodon-users
Hello Dr. Swetha,

No jitters when alpha = 0 (original file) for as-given tolerances. Also I decreased all tol to 1e-1 and all accelerations were zero.

Jitters with non-zero alpha:
As-given tolerance: Jitters of order 1e-6 m/s2 in vertical, 1e-18 in horizontal
With all tol 1e-12, similar order jitters.

Thanks for information on last paragraph. For larger problems, gravity won’t converge in a single step.

Thank you
Samyog


Swetha Veeraraghavan

unread,
Aug 16, 2020, 1:39:39 AM8/16/20
to mastodon-users
Thanks for the clarification, Samyog. I will look at it and get back to you.

Regards,
Swetha

--
https://mooseframework.org/mastodon
https://github.com/idaholab/mastodon
---
You received this message because you are subscribed to the Google Groups "mastodon-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mastodon-user...@googlegroups.com.

Swetha Veeraraghavan

unread,
Aug 17, 2020, 8:35:02 AM8/17/20
to mastodon-users
Hi Samyog, 

I ran the tests and static_initialization works when either _alpha or _zeta is zero, but it does not work currently when both _alpha and _zeta are non-zero, i.e., when HHT and Rayleigh damping are turned on simultaneously. 

The DynamicStressDivergenceTensors kernels at any general time step is calculating _zeta*K*[(1+_alpha)vel-_alpha vel_old]+ alpha K [ u - uold] + K u. This when written in terms of stresses becomes
 = _zeta*[(1+alpha)(Div sigma - Div sigma_old)/dt - alpha (Div sigma_old - Div sigma_older)/dt] + alpha [Div sigma - Div sigma_old] +Div sigma

Now when executing timestep 2, this requires sigma (at t=0.2), sigma_old (t=0.1) and sigma_older (t=0.0). Note that Sigma_older is required only in the case when both zeta and alpha are non-zero. The difference between sigma_older and sigma_old is not equal to zero at timesep 2 and this is causing the problem. To fix this, another if-else loop needs to be inserted at line 76 of DynamicStressDivergenceTensors.C that omits the _zeta* alpha (Div sigma_old - Div sigma_older)/dt calculation for timestep 2 as this should be zero. The changes required are given below.

else if (_dt > 0)
  {
    if (_alpha != 0.0 && _zeta[_qp] != 0.0 && _static_initialization && _t == 2.0*_dt)
     {
       residual +=
        _stress[_qp].row(_component) * _grad_test[_i][_qp] *
            (1.0 + _alpha + (1.0 + _alpha) * _zeta[_qp] / _dt) -
        (_alpha + (1.0 + 1.0 * _alpha) * _zeta[_qp] / _dt) * _stress_old[_qp].row(_component) *
            _grad_test[_i][_qp];

    if (_volumetric_locking_correction)
      residual += (_stress[_qp].trace() * (1.0 + _alpha + (1.0 + _alpha) * _zeta[_qp] / _dt) -
                   (_alpha + (1.0 + 1.0 * _alpha) * _zeta[_qp] / _dt) * _stress_old[_qp].trace()) /
                  3.0 * (_avg_grad_test[_i][_component] - _grad_test[_i][_qp](_component));
     }
     else{
      residual += ...

I will try to make this change in the repo soon. But in the meantime you can use the above code to fix the bug. Thanks for pointing this out.

Regards,
Swetha

Samyog

unread,
Aug 17, 2020, 11:52:13 AM8/17/20
to mastodon-users
Hello Dr. Swetha,

When I ran the test with zeta = 0 and alpha = -0.3, and all tolerances 1e-12, there are still jitters but now of the order 1e-14 in vertical direction (compared to 1e-6 when zeta = as-originally-defined). So, is it correct to say that the problem exists only when both zeta and alpha are non-zero?

Thanks for finding the source of the problem and sharing the code.

If you are making changes in the code, I think it would be convenient to allow ‘static initialization’ over user-defined number of time-steps.

Thank you
Samyog
Reply all
Reply to author
Forward
0 new messages