0

I'm still pretty new to Mathematica and I'm having a few issues solving these coupled equations. I've attempted using NDSolve with method "ExplicitRungeKutta" as well as with no method, and have had zero success so far. I came across a few different answers on here (e.g. Solving a system of ODEs with the Runge-Kutta method) that I attempted to implement, but haven't had any luck yet. Any suggestions would be greatly appreciated.

Thanks
enter image description here

ClearAll["Global'*"]
ClearAll["@"]
ClearAll[\[Phi], Tru, Trp, ruf, ruv, ru, rp, \[CapitalOmega], \
\[CapitalOmega]0, \[Rho]su, rb0, H, h, \[Sigma], cpb, \[Rho]0, Ru, \
Rmix, \[Eta], wh2, r, r\[Prime], P, \[Upsilon], Qfis, step, keff, \
whl, whv]
Constants -> {Tru, Trp, 
  ru, \[CapitalOmega], \[CapitalOmega]0, \[Rho]su, H, h, \[Sigma], 
  cpb, \[Eta], wh2, P}

step = 0.001;
Qfis = 200;(* MeV/fission*)
\[Upsilon] = 2.464; (*average number of neutrons produced per fission*)


P = 10.0*10^6; (*Watts*)
keff = 1.00598; Mu0 = 5.99685*^4; Tru = 800; Tboil = 4404; Tmelt = \
1405.3; Trp = 5500; ru = 0.05;
rp = 0.03; PB0 = 30*^6; \[Sigma] = 1500*^-3; rb0 = 100*^-6; Rsu = 
 8.314/238;
Rsh2 = 8.314/2.016; ku = 27; H = 1; \[Eta] = 0.5; \[Rho]h2 = 70.85;
rlist = Range[rp, ru, step];
KCODEnorm = (\[Upsilon]*P)/((1.602*10^-13)*Qfis*keff);
Edep[r_] = KCODEnorm*(1.15455*^-3);
\[Rho]0[r_] = Mu0/(\[Pi] (ru^2 - rp^2) H);(*g m^-3*)
\[Phi][r_] = (Edep[r]*\[Rho]0[r]*(1.602*10^-13))/
  ku; (*1 MeV = 1.602E-13 W*s *)
ansol = FullSimplify[
   DSolve[{\[Phi][r] + Derivative[1][y][r]/
       r + (y^\[Prime]\[Prime])[r] == 0, y[rp] == Trp, y[ru] == Tru}, 
    y[r], r]];
Tu[r_] = FullSimplify[Evaluate[y[r] /. ansol], 
  ru > 0 && rp > 0 && r > 0]

rsolV = Solve[Tu[r] == Tboil, r]
rsolF = Solve[Tu[r] == Tmelt, r]
ruv = r /. rsolV[[2]];
ruf = r /. rsolF[[2]];

\[Rho]su = 19100;
\[Rho]l[r_] = (17270 - 1.4485 (Tu[r] - 1408))
Pl[r_, \[CapitalOmega]_] = 
  Integrate[\[Rho]l[
     r\[Prime]] r\[Prime] \[CapitalOmega]^2, {r\[Prime], 0, r}];
\[Rho]v[r_, \[CapitalOmega]_] = (Pl[ruv, \[CapitalOmega]]/(
   Rsu*Tu[ruv])) Exp[(\[CapitalOmega]^2/(2*Rsu)) (r^2/Tu[r] - ruv^2/
      Tu[ruv] )]

Pv[r_, \[CapitalOmega]_] = \[Rho]v[r, \[CapitalOmega]][[1]]*Rsu*Tu[r];
\[Rho][r_, \[CapitalOmega]_] = 
  Piecewise[{{\[Rho]v[r, \[CapitalOmega]][[1]], 
     rp <= r < ruv}, {\[Rho]l[r][[1]], ruv <= r < ruf}, {\[Rho]su, 
     ruf <= r <= ru}}];
Pu[r_, \[CapitalOmega]_] = 
  Piecewise[{{Pv[r, \[CapitalOmega]][[1]], 
     rp <= r <= ruv}, {Pl[r, \[CapitalOmega]][[1]], 
     ruv <= r <= ruf}, {PB0, ruf <= r <= ru}}];

\[CapitalOmega]sol = 
 Solve[Pl[ruf, \[CapitalOmega]] == 
   PB0 - (2 \[Sigma])/rb0, \[CapitalOmega]]
\[CapitalOmega]0 = \[CapitalOmega] /. \[CapitalOmega]sol[[2]];

(**********************************************
Solve coupled equations
********************************************)

cpb = 15(*J/gK*); h = 1;
Mb = PB0/(Rsh2 Tu[ruf]) (4/3 \[Pi]) rb0^3;
C0 = (3 Mb Rsh2)/(4 \[Pi]);

func = {
  Tb'[t] == (((4*\[Pi]*(rb[t])^2*h)/
        cpb )*(Tu[Rb[t]] - Tb[t]) - (\[Rho]b'[t])*Tb[t])/\[Rho]b[t],
  Rb''[t] == -Mb^-1*
    Integrate[(4 \[Pi] r\[Prime]^2 (Dt[Pu[r, \[CapitalOmega]0], r] + 
           Pu[r, \[CapitalOmega]0]/r) /. (r -> Rb[t] + r\[Prime])) // 
      FullSimplify, {r\[Prime], 0, rb[t]}, 
     Assumptions -> Element[{Rb[t], rb[t]}, Reals]],

  rb[t] == (2 \[Sigma])/((C0*Tb[t])/(rb[t])^3 - 
     Pu[Rb[t], \[CapitalOmega]0]),
  \[Rho]b[t] == C0/(Rsh2*(rb[t])^3)
  }

yinit = {Tb[0] == Tu[ruf], Rb[0] == ruf, rb[0] == rb0, Rb'[0] == 0, 
   rb'[0] == 0, Rb''[0] == 0};
y = {Tb[t], Rb[t], rb[t], \[Rho]b[t]};

tf = 1*^-3;
tstep = 1*^-6;
(*sol=NDSolve[Join[func,yinit],y,{t,0,tf},Method\[Rule]\
"ExplicitRungeKutta", "StartingStepSize"\[Rule]tstep]*)
NDSolve[Join[func, yinit], y, {t, 0, tf}]
futech
  • 1
  • 2
  • 1
    what happens if you do NDSolve[Join[func, yinit], y, {t, 0, tf}]? i.e., automatic options, and let MMA decide what to do, and how to do it? – AccidentalFourierTransform Mar 22 '20 at 00:14
  • Also note that the method you designate doesn’t seem to be an applicable method, nor is it defined correctly—unless it is defined elsewhere that you do not show? – CA Trevillian Mar 22 '20 at 02:41
  • @futech Parameters and functions not defined: PB0, Rsh2, Tu[ruf], rb0, Pu[r, \[CapitalOmega]0]. – Alex Trounev Mar 22 '20 at 10:40
  • @AccidentalFourierTransform: so far it's just been stuck on evaluating with no output yet. – futech Mar 22 '20 at 21:46
  • @AlexTrounev: Those parameters&functions are defined earlier in my code and aren't listed in the original post. The function Pu[r,Omega] is a piecewise function in 'r', so I don't know if that could be an issue of evaluating that integral in NDSolve. – futech Mar 22 '20 at 21:52
  • 1
    @futech it would be better for us to help you if you update your question with those definitions. Also, be sure you have defined CRK4, and are not merely calling it without having defined it first. – CA Trevillian Mar 23 '20 at 02:59
  • 1
    @CATrevillian: I've updated my question with updated full code. I decided to get rid of CRK4, I saw it on link but didn't realize it wasn't prepackaged in NDSolve as a method. I guess I could try defining it in my code like the tutorial does. – futech Mar 24 '20 at 16:05
  • I’m voting to close this question because it's too localized and unlikely to help future visitors. – xzczd Oct 04 '22 at 04:53

0 Answers0