solvepde resulting in Error: Step size too small.

14 views (last 30 days)
Hi,
I'm trying to solve a magnetostatic problem in the PDE Toolbox on a complex geometry of a synchronous motor from the commandline using the recommended workflow. If I specify a current density on my stator winding of 2*10^8 it results in the error stated below. 2*10^7 or 2*10^9 work just fine. Unfortunately the permanent magnet is also modeled with a current density which also results exactly in this error. In this thread a solution is presented, which could work for the legacy workflow using pdenonlin. Is there a similar option in the Recommended workflow with the function solvepde? I could only find the solveroption which i already played around with, but without any luck. Also there is no option for adjusting the Jacobi-Matrix.
Thank you in advance for your help.
% Error using pde.EquationModel/solveStationaryNonlinear (line 104)
% Stepsize too small.
%
% Error in pde.PDEModel/solvepde (line 77)
% u = self.solveStationaryNonlinear(coefstruct, u0);
%
% Error in Main (line 153)
% result = solvepde(motor);

Answers (3)

Alan Weiss
Alan Weiss on 24 Aug 2017
The error comes from the nonlinear solver having trouble. You might be able to get an answer by giving an initial guess of the solution.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation
  2 Comments
Thomas Förster
Thomas Förster on 28 Aug 2017
Thank you on your input, but it doesn't seem possible to guess an initial solution due to the complexity of the problem. I was hoping there is a way to specify solver parameters, that could render my problem solvable. Thank you
Sravan Kumar Putta
Sravan Kumar Putta on 7 Jan 2021
Have you got the solution to your probem ? Even i am facing the same issue... It would be great if you address me with the issue.

Sign in to comment.


Johannes Maierhofer
Johannes Maierhofer on 29 Aug 2017
Hello,
i have the exact same problem. I try to solve a magnetostatic problem using the recommended workflow with Matlab 2017a, resulting in the error: Stepsize too small.
I also tried to play around with the solveroptions.
With best regards

Thomas Förster
Thomas Förster on 6 Sep 2017
This is not a solution, but I at least get a result when adding those options to the solver. I have nearly no knowledge about Finite Element Methods, so I'm not 100% sure what they do.
motor.SolverOptions.MinStep = 0;
This tells the solver to not abort even though the step size nearly doesn't change. I experienced, that even though the nonlin solver gets a really small step size in one iteration, the next ones might be clearly bigger.
motor.SolverOptions.MaxIterations = 50;
Set this to a number high enough to observe when your Residual stagnates
motor.SolverOptions.ResidualTolerance = 5.0000e-02;
This was a value that yielded results in adequate calculation time, that were pretty close to calculations with done on the same Model in FEMM
motor.SolverOptions.ResidualNorm = 2;
I am not sure what this option really does, but without this option I don't get a good residual. It is rudimentary described on this page pdenonlin:
Residual norm, specified as the p value for L^p norm, or as 'energy'. p can be any positive real value, Inf, or -Inf. The p norm of a vector v is sum(abs(v)^p)^(1/p).
Maybe Alan Weiss can elaborate on that?
I try to solve a 3-phase synchronous electical motor with permanent magnets. The only nonlinear material i have is a iron material for stator and rotor. The problem seems to appear around the permanent magnets. I use a linear interpolated µ for the pure iron that was derived from B-H values (realistic values) and above those the saturation the local slope of µ (=1 for air) is used to calculate µ at the specific B value. This of cource results in a non steady function of µr. I was wondering if this could be a problem for the nonlinear solver, though the solver had the same problems with the µ given by a steady function, like the on in the magnetostatic example: 2-pole motor
This µ is a really bad approximation compared to real transformer steel and can only be used in a small operating point.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!