Hi everyone,
I am trying to use automatic differentiation in julia to compute the Jacobian of my outputs wrt my design variables for local sensitivity, but my ODEs are nearly coupled as for example du[3]=A*du[2]+B u[1]. This lead to very high values (~e23) for Jacobian elements. So far I am using an implicit solver (FBDF) to solve my ODE system. Do you have any idea on how can I perform a sensitivity analysis for a system like this in julia?
Hi and welcome to the Julia discourse !
Unfortunately, without an MRE it is diffucult for the community to locate the issue and provide some help.
Have you considered using SciMLSensitivity.jl ?
The most problematic equations in my ODE system are those ones :
du[5]=( sR * (dPsdt * r_S + du[7] * Ps)- k_l- (2 / R_L +2 * rL / (rR * R_R) +(sL + sR) * du[10]) * P_LV) / ((sL + sR) * rL)
du\[6\]=( sL \* (dPsdt \* r_S+ du\[7\] \* Ps)+ k_r- (2 / R_R +2 \* rR / (rL \* R_L) +(sL + sR) \*du\[11\] ) \* P_RV) / ((sL + sR) \* rR)
#dPrv
dr_S_free = ((Q_out+Q_r)/2 - (Q_mit+Q_tri)/2)/ (J_avg)+pi\*p\[3\]\*2\*p\[1\]\*((2\*p\[1\]+e_l\*2\*p\[1\])\*du\[8\]+(2\*p\[1\]+e_r\*2\*p\[1\])\*du\[9\])
du\[7\]=r_S <= p\[2\] ? max(dr_S_free, 0.0) : (r_S >= p\[1\] ? min(dr_S_free, 0.0) : dr_S_free)
#strain rates de_l and de_r
du\[8\]= (rL\*du\[5\]+du\[10\]\*P_LV)\*(1-0.33/2)/(p\[9\]\*p\[11\])
du\[9\]= (rR\*du\[6\]+du\[11\]\*P_RV)\*(1-0.33/2)/(p\[10\]\*p\[11\])
dr_L_free=2\*p\[1\]\*du\[8\]-du\[7\] #rl
du\[10\]=rL <= p\[12\] ? max(dr_L_free, 0.0) : (rL >= p\[13\] ? min(dr_L_free, 0.0) : dr_L_free)
dr_R_free=2\*p\[1\]\*du\[9\]-du\[7\] #rr
du\[11\]=rR <= p\[12\] ? max(dr_R_free, 0.0) : (rR >= p\[13\] ? min(dr_R_free, 0.0) : dr_R_free)
where P_Ao, P_PA, P_vs, P_vp,P_LV,P_RV, r_S,e_l,e_r,rL,rR = u
What happens when you lower the relative tolerance? Are you sure it’s an expected divergence?
Try Multifloats.jl for a higher precision?