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.

Faraday's law

∇ × E = iωμH

Current density

J = σE

Joule heating

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.

Total Joule-power change across the tested boundary range

≈ 0.08%

But the electric field itself was still moving.

Final electric-field change

ΔE ≈ 0.00215

My field-convergence target

Δ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.

Electric-field change caused by refining the volume mesh

ΔEmesh ≈ 4.93 × 10−6

Compare that with the change I was still getting from increasing the spherical harmonic boundary resolution:

Electric-field change from the final boundary-cutoff step

ΔEboundary ≈ 2.15 × 10−3

The mesh effect was tiny compared with the boundary effect. Another way of looking at it:

Mesh effect relative to the remaining boundary effect

Δ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.

Relative total-power difference after mesh refinement

≈ 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.

Qualified boundary representation

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:

Local Joule heating

q = ½σ|E|²

And the integrated power has to agree with the matrix version:

Integrated Joule power

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)

Independent final residual

9.63 × 10−11

And the energy closure was extremely tight.

Relative energy-closure error

5.28 × 10−12

The total Joule heating for that one forcing mode was:

Realistic-material Joule power

P = 1268.878 W

The simplified-material version gave:

Controlled-material baseline

P = 1810.427 W

So putting in the realistic material structure changed the result by almost 30%.

Realistic-material change

−29.91%


Realistic / controlled power ratio

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:

Primary abyssal-water target

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:

Total power check

Pwater + Psolid

1268.878 W

Then the water gets split by depth:

Ocean heating by actual water 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:

Frequency-domain electromagnetic system

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.

Next
Next

The Coastline Broke My Electromagnetic Solver, So I Rebuilt It