Thanks to helpful comments from Michael E2 and George2079, I was able to focus in on exactly the source of the issue. With some simplification, I can reduce the problem to:
NDSolve[{Derivative[1][y][t] == (-2 E^(1/5 y[t]) + 1)/(-600 E^(1/5 y[t]) +
20338 + (2/10) t ), y[101690] == 0}, y, {t, 0, 101690},
MaxSteps -> \[Infinity], WorkingPrecision -> 150]
It quickly throws:
NDSolve::ndcf: Repeated convergence test failure at t == <<185>>; unable to continue. >>
But this problem has an analytical solution:
y[t_] := 1/600 (2 t + C[1] + 3000
ProductLog[C[2],
-((E^(-(t/1500) - C[1]/3000) (101690 + t))/3000)])/.
{C[1] -> 0, C[2] -> -1}
Which you can verify via:
In[1]:= N[y[101690]]
Out[1]= 0.
In[2]:= Simplify[y'[t] -
(-2 E^(1/5 y[t]) + 1)/(-600 E^(1/5 y[t]) + 20338 + (2/10) t)]
Out[2]= 0
This function is pretty well behaved.
I am hoping to understand the related issues with NDSolve, because I'm relying on that engine for more complex problems and this issue is a barrier to its application.
The documentation for the ndcf error says:
If you see this message and the cause is not evident from the nature of the example, please send your example to Technical Support so that it can be investigated.
10^-80
-10^-30
forPrecisionGoal -> 8
) that integration will never finish (effectively). $\endgroup$SetPrecision
is unintentionally also converting integers to reals. Now your equations are expressed in terms of variables such asCee[4.000000000000000000....]
. Since now the symbols in thevars
list (egCee[4]
) do not appear in the equations you get a trivial solution. $\endgroup$InitialConditions = {Cee[4][t0] == -270917. ... } /. x_Real :> SetPrecision[x, prec]
. (With that fix I get an out of memory error though) $\endgroup$