Compact Ferrofluid Pump for Laptop Liquid Cooling To Improve Cooling Performance Over Heat Pipes

This was my 2024 Synopsys science project.


While liquid cooling presents itself as an efficient cooling method for ever-hotter integrated circuits, it is confined to mostly commercial applications and occasionally premium desktops. Instead, high-performance laptops rely on heavy and bulky heat pipes to bring heat from processor to radiator, somewhat defeating the purpose of a portable computer. I aimed to create a ferrofluid pump without moving parts capable of cooling a laptop effectively.

My solution involved creating a closed loop of ferrofluid and pumping it magnetically. I tested four different designs: three using traveling magnetic fields in different forms to propel the fluid while the fourth simply pulsed a coil on and off to draw fluid up one side of a crested pipe, then allow it to fall down the other.

None of the prototypes I constructed produced any observable pumping action due to the low hysteresis of ferrofluid particles, making my idea impractical at the power and size requirements of a laptop. However, since two of my prototypes were effective at moving solid objects both inductively and magnetically, I might try pumping a conductive fluid inductively, or pumping a separate coolant with ferrofluid as a piston, using its high magnetic susceptibility instead of coercivity to move it back and forth.


High-performance laptops would benefit from liquid cooling because it would reduce the weight and bulk of the cooling system. While laptops today use up to ten heat pipes to move heat from the processor to a fan-cooled radiator, liquid cooling would use only one or two pipes, transferring heat faster to a larger radiator that uses quieter fans. However, due to the potential for leaks, as well as the lack of a sufficiently small and reliable pump, this is at the moment impractical. I propose to create a ferrofluid pump to pump coolant without moving parts, allowing for a completely closed cooling loop that would be less leak-prone and more reliable.


Heat pipes are a highly space-efficient way of passively transferring heat. They work by evaporating a liquid on the “hot” end and condensing it on the “cold” end, returning the condensed liquid to the hot end with a wick. Heat pipes for computers are usually made of annealed copper, using water as the working fluid and sintered copper powder as the wick. They are sometimes painted black to better radiate heat or flattened to reduce thickness.

Ferrofluids are liquids with very fine magnetic particles suspended in them; the particles are so fine that they do not separate out. Most commonly available ferrofluids are magnetite particles suspended in mineral oil or kerosene, which have a much lower heat capacity than water. They can be pumped by a combination of spatial and temporal variation in magnetic field, for example when placed in a linear motor. In addition, by using magnetic fields to pinch and move ferrofluid in a pipe, researchers created a reciprocating piston capable of pumping other fluids.

Linear motors typically involve connecting a row of coils in the stator to a 3-phase power supply, creating a moving magnetic field. The “rotor” (i.e. the part that moves linearly) can either be a permanent magnet, moved through magnetic attraction, a conductive material (typically aluminium) moved through induction and Lenz’s law, or a ferromagnetically “hard” material that resists changes in magnetization functioning similar to a permanent magnet rotor.

Engineering Goal

The goal is to make a ferrofluid pump for compact, self-contained liquid cooling in laptops that works better than heat pipes for those who want to increase the ability of a laptop while maintaining its portability.

Brief Description

The first design I tried (Fig. 1a) was similar to a coil gun, with four coils wrapped around a brass pipe and separated with washers. Next, as a sort of proof-of-concept (Fig. 1b), I used a motor to spin a steel rotor as a magnetic core with two neodymium magnets attached on either side inside a coil of PVC tubing. Another design I tried (Fig. 1c) requires no moving magnetic field, instead using a single coil to pull fluid up from the lower (i.e. input) side filling a hill-shaped pipe, then turning the coil off and allowing some fluid to fall down the higher (output) side, though such a design would be impractical since it is heavily gravity-dependent, its shape is unsuitable for a laptop case, and it consumes a lot of power. Finally, I tried placing a pipe on top of a simple linear motor constructed by screwing 3 coils to a wooden base (Fig. 1d).

To supply the 3-phase power needed to operate the coil gun (Fig. 1a) and linear motor (Fig. 1d) designs, I used some L298N motor drivers, which can control the voltage applied with pulse-width modulation (PWM) as well as its polarity with an H-bridge. These were connected to an Arduino Uno to make a simple variable frequency drive. I simply used a square-wave output since the Uno’s low 490Hz PWM frequency made a sine wave output impractical.

I tested my designs by elevating input and output jars of ferrofluid, dipping PVC tubes in each, connecting them to the pump, located below the jars so it would always be filled with ferrofluid (Fig 2). I used mouth suction and a vacuum trap (critical to avoiding accidental ingestion of ferrofluid) to suck ferrofluid from the input jar into the pump.

When pumping ferrofluid failed, I collected data on inductively propelling a 3 mm diameter steel rod through the coil gun prototype as an analog to pumping a conductive fluid. By oscillating the moving magnetic field’s direction, moving the rod back and forth at a set frequency, I was able to find the rod’s speed by measuring its displacement in each oscillation. The data (Fig. 3) describes the relationship between voltage, frequency, speed, and current.

Fig. 1





Fig. 2


None of my designs were able to produce any observable pumping in the ferrofluid I purchased. Three of them (Figs. 1a, 1b, 1d) place ferrofluid in a moving magnetic field, assuming this will cause it to move due to magnetic hysteresis creating a mismatch between the magnetic field of the coil and the magnetization in the ferrofluid. However, as iron particles decrease in size, their coercivity also decreases, such that the tiny particles in ferrofluids have very low hysteresis

Propelling the steel rod with 20 V applied to the coils, the coil gun (Fig. 1a) had an ideal VFD frequency of 350 to 400 Hz, allowing it to move the rod at over 100 mm/s using around 60 W of power. Since the moving magnetic field’s speed far exceeded the rod’s speed, we can be reasonably certain this propulsion was solely the result of induction (and not hysteresis, which acts when the speeds are matched), the same force that would act to pump a conductive liquid. In addition, my data confirmed that adding the rod (a magnetic core) to the coils (an inductor) increases their impedance, as does increasing the VFD frequency.

Fig. 3

Further Iterations

Since my idea of pumping ferrofluid directly is impractical, I might try several different designs while still eliminating moving parts from the pump. Firstly, as the steel rod demonstrates, inductively pumping a liquid metal or other conductive fluid with high heat capacity through the linear motor could work. Another possibility is to make a magnetohydrodynamic drive, pumping a conductive fluid between two electrodes using the Lorentz force generated when magnetic fields and electric charge exist at right angles, functioning similarly to a homopolar motor or railgun.

Additionally, another design proposed uses magnetic fields to move a “slug” of ferrofluid in a pipe back and forth creating a reciprocating pump, allowing more traditional coolants like water to be pumped so long as they are immiscible with the ferrofluid. Since the ferrofluid need not fill the whole pump, it can be moved by magnetic attraction, which is what most commercial ferrofluids are good at.

In general, testing designs with actual ferrofluid was a very messy and time-consuming process. Any further experimentation I conduct would definitely involve some analog for ferrofluid, preferably a solid, but at the very least easier to wash than ferrofluid.

Finally, as is so often the case, the best solution might be to simply scrap the original technically advantageous but impractical idea of pumping without moving parts and simply improve on the reliability and compactness of existing technology. Magnetic drive pumps that remove the need for a rotary seal already exist, and it would probably be easier to decrease one’s size rather than to pursue the ideal of no moving parts.

Works Cited

  • Commissariat, T. (2018, January 15). Ferrofluid pump has no moving parts. Physics World.
  • Crowley, C. J., & Stacy, W. D. (1989, February 28). Magnetic pump for ferrofluids.
  • Kang, S, Miller, D, & Cennamo, J. “Closed Loop Liquid Cooling for High Performance Computer Systems.” Proceedings of the ASME 2007 InterPACK Conference collocated with the ASME/JSME 2007 Thermal Engineering Heat Transfer Summer Conference. ASME 2007 InterPACK Conference, Volume 2. Vancouver, British Columbia, Canada. July 8–12, 2007. pp. 509-515. ASME.
  • Leland, J. E. (1991, April 9). Ferrofluid piston pump for use with heat pipes or the like.
  • Nguyen, N.-T. (2012). Concepts of ferrohydrodynamic micropumps: a magnetocaloric pump (Pal et al. 2011); b annular pump with two ferrofluid plugs (Hatch et al. 2001); c annular pump with one ferrofluid plug (Sun et al. 2007); d peristaltic pump (Ando et al. 2009a); e pump with three ferrofluid valves (Ando et al. 2009b); f pump with check valves and ferrofluid piston (Yamahata et al. 2005); g stepper ferrohydrodynamic pump (Nguyen 2009). ResearchGate. Retrieved November 25, 2023, from
  • Pattanaik, M. S., Varma, V. B., Cheekati, S. K., Chaudhary, V., & Ramanujan, R. V. (2021). Optimal ferrofluids for magnetic cooling devices. Scientific Reports, 11(1).
  • R. Mongia et al., “Small scale refrigeration system for electronics cooling within a notebook computer,” Thermal and Thermomechanical Proceedings 10th Intersociety Conference on Phenomena in Electronics Systems, 2006. ITHERM 2006., San Diego, CA, USA, 2006, pp. 751-758, doi: 10.1109/ITHERM.2006.1645421.
  • Rajamani, K. (2024). A low-frequency ferrohydrodynamic pump for a magneto-caloric refrigerator. Applied Energy, 355.
  • Biedermann, A. R., & Parés, J. M. (2022). Magnetic properties of ferrofluid change over time: Implications for magnetic pore fabric studies. Journal of Geophysical Research: Solid Earth, 127, e2022JB024587.

Other Resources

VFD Schematic

VFD Code

const int d1[] = {2,6,10};
const int d2[] = {3,7,11};
const int d3[] = {4,8,9};
int frequency = 1;
double period = 1000.0 / frequency;
int timeCount = 0;
bool turnedOn = true;
String command;
bool reverse = false;

int oscillateFrequency = 0;

void smartDelay(double ms){
  delayMicroseconds(round(1000 * (ms - (int)ms)));

void setVoltage(int device[], float voltage){ //voltage goes from -1 to 1
  int pin1 = device[0];
  int pin2 = device[1];
  int pwm = device[2];

  if(voltage > 0){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
  analogWrite(pwm, abs(voltage)*255);

void setup(){
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);

void loop() {
    command = Serial.readStringUntil('\n');
      reverse = !reverse;
      Serial.println("reversed direction");
    }else if(command.equals("on")){
      turnedOn = true;
      Serial.println("turned on");
    }else if(command.equals("off")){
      turnedOn = false;
      Serial.println("turned off");
      setVoltage(d1, 0);
      setVoltage(d2, 0);
      setVoltage(d3, 0);
    }else if(command.substring(0,9).equals("oscillate")){
      oscillateFrequency = command.substring(9).toInt();
      Serial.println(" oscillation frequency");
    }else if(command.toInt() == 0 && !command.equals("0")){
      frequency = command.toInt();
      period = 1000.0 / frequency;
      Serial.print(" Hz frequency, ");
      Serial.println(" ms period");
  if(oscillateFrequency != 0){
    if(millis() % (1000 / oscillateFrequency) < (1000 / oscillateFrequency / 2)){
      reverse = true;
      reverse = false;
  if(!reverse && turnedOn){
    setVoltage(d1, 1);
    smartDelay(period / 6);
    setVoltage(d3, -1);
    smartDelay(period / 6);
    setVoltage(d2, 1);
    smartDelay(period / 6);
    setVoltage(d1, -1);
    smartDelay(period / 6);
    setVoltage(d3, 1);
    smartDelay(period / 6);
    setVoltage(d2, -1);
    smartDelay(period / 6);
  }else if(reverse && turnedOn){
    setVoltage(d3, 1);
    smartDelay(period / 6);
    setVoltage(d1, -1);
    smartDelay(period / 6);
    setVoltage(d2, 1);
    smartDelay(period / 6);
    setVoltage(d3, -1);
    smartDelay(period / 6);
    setVoltage(d1, 1);
    smartDelay(period / 6);
    setVoltage(d2, -1);
    smartDelay(period / 6);

Speed Measuring Setup



I won an IEEE award and an award from the Office of Naval Research.