# Dyad 3.0 slower Transient Analysis

**URL:** <https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148>\
**Category:** Modelling & Simulations\
**Created:** [May 17, 2026, 8:19pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148 "2026-05-17T20:19:04Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [May 17, 2026, 8:19pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/1 "2026-05-17T20:19:04Z")

</div>

Hi

I just got greeted in VSCode with a message that made me update to Dyad 3.0… After using the AI to update my models I now realized that the TransientAnalysis is now much slower that before. (5min instead of 3min maybe)

I am simulating a Vienna Rectifier that has some switches switching at 50kHz, so I am not expecting something super fast, but this feels easily double the time than before.

Honestly I am not sure how to get back to the previous Dyad Release, otherwise I would love to share some real numbers.

I published the code here if it helps: [https://gitlab.com/gruemel/julia/dyad\_vienna\_afe](https://gitlab.com/gruemel/julia/dyad_vienna_afe) There is a commit " Updated the model to Dyad 3.0" for the updated code

I tried setting `optimize = OptimizationLevel.Basic(),` and `optimize = OptimizationLevel.Agressive(),` but these are not working due to some errors.

Anything I can do to get more insights where this is coming from?

---

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [May 17, 2026, 8:36pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/2 "2026-05-17T20:36:44Z")

</div>

Tomorrow I will try again with a windows laptop still running the old version, to get some concrete values.

---

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [May 18, 2026, 8:55am UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/3 "2026-05-18T08:55:51Z")

</div>

It’s not perfect since it is not the same machine, but I think it gives the picture:

Linux dyad 3.0: `239.544428 seconds (122.03 M allocations: 80.717 GiB, 10.04% gc time, 0.00% compilation time: 100% of which was recompilation)`

Windows dyad 2.3: `14.381151 seconds (23.07M allocations: 4.706 GiB, 19.00% gc time, 0.00% compilation time)`

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 18, 2026, 8:57am UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/4 "2026-05-18T08:57:43Z")

</div>

Yup that’s gives a picture. We can look into it.

---

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [May 18, 2026, 8:59am UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/5 "2026-05-18T08:59:22Z")

</div>

That was a quick reply! Thank you Chris!

If I can do anything to help debug, let me know.

---

<div class="post-metadata">

**Author:** ![pierre-haessig](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pierre-haessig/32/217129_2.png) [@pierre-haessig](https://discourse.julialang.org/u/pierre-haessig)\
**Post date:** [May 18, 2026, 9:41am UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/6 "2026-05-18T09:41:08Z")

</div>

Thanks for sharing these examples. I’m just adding a link to the circuit topology, since I didn’t know it:

> **[Vienna rectifier](https://en.wikipedia.org/wiki/Vienna_rectifier)**
>
> The Vienna rectifier is a three-phase AC pulse-width modulation rectifier, invented in 1993 by Johann W. Kolar at TU Wien, a public research university in Vienna, Austria.
> The Vienna rectifier provides the following features:
> The Vienna rectifier is a unidirectional three-phase three-switch three-level pulse-width modulation (PWM) rectifier. It can be seen as a three-phase diode bridge with an integrated boost converter.

I also find a [schematic](https://gitlab.com/gruemel/julia/dyad_vienna_afe/-/blob/main/vienna_schematic.png?ref_type=heads) in your repo, but it’s not obvious is the same a the one on Wikipedia.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 18, 2026, 3:24pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/7 "2026-05-18T15:24:29Z")

</div>

Figured out what it is. It looks like this is due to the enabling of inline linear SCC passes without the rest of the new compiler framework being released (the other part is scheduled for the upcoming 3.1.0 release).

We’d either need a 3.0.1 to allow for temporarily disabling inline linear SCCs or just wait for the 3.1.0 which includes the new compiler passes to make these non-allocating. The problem with disabling is that it can change the state selection, which in particular makes the model require a lot more guesses, so it would be a breaking change and a pretty bad quality of life thing to have this turned off. So the best thing to do for this model is probably to just have the regression fixed in the 3.1.0 with the new compiler codegen. That’s not the most ideal answer but since that is already scheduled for the very near future it’s almost as fast as a patch release would be, that is the way to do this that’s the most future-proofed.

In the meantime, if you’re willing to get a bit manual, you can get around this by disabling the linear SCC inlining by taking the mtkcompile command directly and doing:

```julia-auto
ModelingToolkit.StructuralTransformations.DefaultReassembleAlgorithm(;
      inline_linear_sccs = true, analytical_linear_scc_limit = 1)
  sys = mtkcompile(model; additional_passes = passes, reassemble_alg)

```

---

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [May 18, 2026, 3:59pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/8 "2026-05-18T15:59:05Z")

</div>

Hi Chris,

since I am currently “just scratching an itch” and I need to also work around the [maxiters](https://discourse.julialang.org/t/dyad-warning-verbosity-toggle-max-iters/137133) topic, for me doing it manually is just fine.

You decide which solution is best from business/process point of view 😉

BR  
Johannes

---

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [June 18, 2026, 10:16am UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/9 "2026-06-18T10:16:27Z")

</div>

Hi,

I just updated to 3.1.1 and it looks like the change made it in there. But now I am getting an issue concerning some derivatives.

I let the Agent figure it out for me (no credits for me) and have it create a bug report: [BUGREPORT\_inline\_linear\_sccs\_init.md · 099f8bca88bc6c47fda1707679807645f05713a7 · gruemel / julia / Dyad\_Vienna\_AFE · GitLab](https://gitlab.com/gruemel/julia/dyad_vienna_afe/-/blob/099f8bca88bc6c47fda1707679807645f05713a7/BUGREPORT_inline_linear_sccs_init.md)

The commit [fix issue with dummy derivatives and inline\_linear\_sccs = true (099f8bca) · Commits · gruemel / julia / Dyad\_Vienna\_AFE · GitLab](https://gitlab.com/gruemel/julia/dyad_vienna_afe/-/commit/099f8bca88bc6c47fda1707679807645f05713a7) fixes it for me, but I am sure this is not how it is supposed to be.  
@ChrisRackauckas should I file a bug somewhere or is that already known?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [June 18, 2026, 7:50pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/10 "2026-06-18T19:50:22Z")

</div>

Not previously known @cryptic.ax

---

<div class="post-metadata">

**Author:** ![cryptic.ax](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cryptic.ax/32/220540_2.png) [@cryptic.ax](https://discourse.julialang.org/u/cryptic.ax)\
**Post date:** [June 19, 2026, 5:17am UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/11 "2026-06-19T05:17:40Z")

</div>

Thanks for the bug report @gruemelmonster. This issue has already been fixed in newer versions of ModelingToolkit.

```julia
julia> prob = try_build(inline = true, limit = 1)
julia> sol = solve(prob)
retcode: Success
Interpolation: 3rd order Hermite
t: 52801-element Vector{Float64}:

```

---

<div class="post-metadata">

**Author:** ![gruemelmonster](https://avatars.discourse-cdn.com/v4/letter/g/b782af/32.png) [@gruemelmonster](https://discourse.julialang.org/u/gruemelmonster)\
**Post date:** [June 19, 2026, 4:15pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/12 "2026-06-19T16:15:02Z")

</div>

Can you tell me which version of MTK has the fix?

I am not sure what the snippet is supposed to tell me, sorry.

---

<div class="post-metadata">

**Author:** ![cryptic.ax](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cryptic.ax/32/220540_2.png) [@cryptic.ax](https://discourse.julialang.org/u/cryptic.ax)\
**Post date:** [June 19, 2026, 5:19pm UTC](https://discourse.julialang.org/t/dyad-3-0-slower-transient-analysis/137148/13 "2026-06-19T17:19:26Z")

</div>

> Can you tell me which version of MTK has the fix?

ModelingToolkitTearing@1.14.1 fixed this. ModelingToolkitTearing is a dependency of ModelingToolkit.

> I am not sure what the snippet is supposed to tell me, sorry.

I apologize, I should have been clearer. The snippet is copied from my REPL. It is meant to demonstrate that I managed to run `try_build` from your reproducer, got an `ODEProblem` out, and successfully solved it.
