From Space Weather to the Abyssal Ocean: Where My EM Solver Is Now
The last time I wrote about my electromagnetic (EM) solver, I was stuck … The total amount of electromagnetic heating looked stable, but the detailed electric field did not.
I’d already spent a lot of Phase 3 rebuilding how the solver handled coastlines, the seafloor, conductivity jumps, spherical harmonics, and the finite element boundary. At that point, I really didn’t want to just keep increasing the resolution until the convergence number eventually became small enough. So I had to find what was causing the electric field to keep changing.
where I left off
The basic physics still hasn’t changed…a changing magnetic field creates an electric field. That electric field drives current through conductive material, and some of that electrical energy turns into heat.
∇ × E = iωμH
J = σE
q = ½σ|E|²
The problem is solving them across an actual Earth. Ocean water conducts electricity differently from rock, and there are coastline boundaries. The seafloor changes depth constantly, and my EM boundary is represented with spherical harmonics, which really prefer smooth things. Earth continues to refuse spherical harmonics. :)
By the end of my last post, I’d pushed the boundary representation pretty far, and the total heating barely changed anymore.
≈ 0.08%
But the electric field itself was still moving.
ΔE ≈ 0.00215
ΔE ≤ 0.0005
So the field was still changing by a little more than four times what I wanted.
I needed to know why.
first: was the 3D mesh too coarse?
My finite element solver breaks the shallow Earth into a huge number of little tiny tetrahedra. The electromagnetic field lives on that mesh. Maybe the spherical harmonic boundary was fine, and the remaining error was the interior mesh running out of resolution.
So I rebuilt the same problem with much finer resolution through the part of the Earth where the remaining field change was concentrated, and then I compared the two solutions.
The field barely changed.
ΔEmesh ≈ 4.93 × 10−6
Compare that with the change I was still getting from increasing the spherical harmonic boundary resolution:
ΔEboundary ≈ 2.15 × 10−3
The mesh effect was tiny compared with the boundary effect. Another way of looking at it:
ΔEmesh / ΔEboundary ≈ 0.00229
So the deeper finite element mesh was not the thing holding me back. That felt so good, because it meant I finally knew what I was looking at. The remaining field change was mostly a boundary harmonic problem, not a volume mesh problem.
the energy was stable
While the detailed field was still sensitive to the highest spherical harmonic degrees, the integrated Joule heating basically didn’t care at all. Even after refining the mesh, the total power barely moved.
≈ 1.3 × 10−9
That forced me to separate whether the electric field fully converges from the Joule heating quantities being stable.
I could keep increasing the resolution
I did build a higher capacity boundary representation just to see if I could push farther, and I definitely can.
L = 128
I didn’t immediately run another huge physical solve because my main question is how much EM energy goes into the ocean vs. solid Earth? And, (especially) how much reaches the abyssal ocean????
So I’m keeping the stricter field convergence requirement, but I’m also being clear about what the solver is ready to tell me. I trust it for integrated Joule power and broad depth/spatial energy calculations. I’m not saying every tiny feature in the electric-field map is fully converged.
I froze the solver
I have to stop rebuilding things, so I froze the first production version. The local heating is:
q = ½σ|E|²
And the integrated power has to agree with the matrix version:
P = ½ Re(EHMσE)
I’ve become very obsessive about energy closure, guys.
Make it a real Earth
Most of the development work used a very simple Earth with constant ocean conductivity, and simple layers. That helps me debug, but at this point I was ready to put the real ocean back in. The production model now uses SeaSigma conductivity and the local seafloor depth.
The deep ocean gets a deeper water column, and shallow ocean gets a shallow one. I even added the seafloor beneath the ocean. Some finite element cells cross the seafloor, so I evaluate the material inside each cell instead of just calling the whole thing water or rock.
The interface tests passed! So the realistic conductivity model was finally ready.
Real magnetic forcing
For the first production test, I used one real external magnetic-field mode from SWARM. Just one, guys (start small). This is not the final ocean-heating result, it’s a production check: Can the realistic model take real forcing, solve the field, and still close the energy budget?
Yes!!! (feels so good)
9.63 × 10−11
And the energy closure was extremely tight.
5.28 × 10−12
The total Joule heating for that one forcing mode was:
P = 1268.878 W
The simplified-material version gave:
P = 1810.427 W
So putting in the realistic material structure changed the result by almost 30%.
−29.91%
0.7009
So yes... the material model matters a lot.
Where I am now
Ok guys, so we know the total heating, now we need to know WHERE IT WENT. First how much went into the ocean vs. solid Earth, then we’ll look at the water depth. Of course, the later I care the most about is:
4000 m ≤ depth < 6000 m
And, I mean real water at those depths, not just a shell like we had before. If that location is rock, it counts as solid Earth heating. I’ve built the postprocessor to separate all of that and check that the pieces still add back to the known total.
The first check is:
Pwater + Psolid
≈
1268.878 W
Then the water gets split by depth:
0–2 km
2–4 km
4–6 km
6–8 km
8–10 km
10–12 km
Once that closes, the production baseline is done. Finally :)
The real experiment starts
One SWARM mode is only a test, the real problem is the magnetic field changing over time. SWARM gives me a time series of external magnetic field coefficients. Instead of solving thousands of completely separate giant problems, the next stage works in frequency space.
For each frequency:
A(ω) = K − iωMσ
The computationally expensive part is building that system. Once it exists, I can run many magnetic forcing patterns through it and reconstruct the heating from the real changing field. Then I finally get the quantities I actually care about: How much energy goes into the ocean? Where does it go? How much reaches the abyssal layer? Does it match the Johnson [1] pattern?
Which was the whole point of building this solver in the first place :)
References
[1] Johnson, G. C. (2026). Observed Multi-Decadal Acceleration of Globally Averaged Abyssal Ocean Warming.Geophysical Research Letters. doi:10.1029/2026GL124104. Johnson found a statistically significant increase in the globally integrated abyssal heat-uptake rate, from about 5.4 TW in 1988 to 20.2 TW in 2018.