I met this problem when running dynamic rupture simulations with pylith v2.2.2:
RuntimeError: Determinant of Jacobian (9.4545e-07) for cell 5405 is smaller than minimum permissible value (1e-06)!
The two most likely causes of this are highly distorted cells and nondimensionalization with a length scale that is much larger than the dimensions of the cells.
I have checked the mesh quality and it meets the requirements. I found in previous topics that this problem can be solved by modifying the length_scale property of normalizer. But the NondimElasticDynamic normalizer doesn’t have the property length_scale, so I tried to change the wave_period to make it smaller. But I still got the error:
RuntimeError: Current nondimensionalized time step of 1.7600e-01 exceeds the nondimensionalized stable time step of 1.6376e-01.
Could you please tell me how to solve it?
By the way, I’m wondering will the bias_factor in gradient.jou significantly effect the simulations results? Most bias_factors are set to 1.02, if I use a larger value like 1.05 or 1.1, and the cohesive zone is well resolved, are the results of slip distribution on fault still reliable?
It sounds like you are on the correct path by adjusting the nondimensional scales. Assuming you have set the shear_wave_speed to match the minimum shear wave speed in your mesh, then the wave_period is the correct parameter to adjust. You should have at least 10 cells per your shortest wavelength. If your minimum shear wave speed is 2000 m/s and your cells are 100 m in size in that region, then your minimum period is 10*100 m / 2000 m/s = 0.5 s.
The time step is a different issue. Your time step is slightly larger than what PyLith has calculated to be a stable time step, accounting for the distortion of the cells and the P wave speed. If you reduce your time step by about 10-20% you should have a stable time step. The estimated stable time step is an approximation, so if you reduce it by 20% and the solution blows up during the solve, then reduce it by a little more.
If you use a bias_factor of 1.05-1.1, then the cells will grow faster with distance from the fault and you may not have at least 10-12 cells per your shortest wavelength and you will not resolve the wave field with sufficient accuracy. If all you are about is rupture propagation and the radiated seismic waves do not interact with the rupture, then you might be okay. If you are interested in the ground motions or other features associated with the radiated seismic waves, such as dynamic stress changes, then you should use a bias factor closer to 1.0, like 1.02.
Thanks for answering. The minimum shear wave speed in my model is ~3300 m/s, and the maximum and minimum cell sizes in my mesh are 2000 m and 150 m, I think that the theoretical wave_period should be calculated with the maximum cell size. Then my wave period should be larger than 6 s. But I still got the same error, and I found that the larger the wave period I set, the smaller the determinant of Jacobian is. The minimum permissible value stays the same (1e-06). Then I changed the wave period to 0.5 s and slightly reduced the time step, and the program ran well. Could you please tell me why would larger wave period report errors?
The wave period is determining the length scale used in the nondimensionalization. The length scale at the edges of your domain where little is going on (maximum cell size) is not as important as the length scale near the fault where the deformation is most significant. Thus, in your case the relevant wave period would be `T = 10*150 m / 3300 m/s = 0.45 s or about 0.5 s.
The Jacobian is the scaling between the reference cell (cube with side lengths of 2) and the actual cells. If you use too large of a length scale for nondimensionalization, then the nondimemsional size of the cells is extremely small and the error message is generated. For example, if your cells have a length of 200 m and the length scale for nondimensionalization is 10 km, then the size of the cells after nondimensionalization is 0.02 x 0.02 x 0.02 and the determinant of the Jacobian will be (2/0.02)**3 = 1.0e-6.
Hi, Brad. I export the displacements of the simulation at several points. And I found that some components of certain points would increase or decrease linearly after the seismic wave propagated. Is this caused by the reflected waves at the boundary or is the wave field not resolved with sufficient accuracy?
This looks like long length scale deformation. If you are using absorbing boundaries at the edges of the domain, they are free surface boundary conditions when there is no motion. As a result, the domain will come to equilibrium with zero tractions on the boundaries. You may need to increase the size of your domain to move the free surface further away from the fault slip.