next up previous
Next: Breathing balloon Up: Balloon program examples Previous: Balloon program examples

Active balloon

In this example, The balloon on the left is actively controlled by increasing and decreasing the elastic link stiffness on the left balloon. This will make the left balloon an effective pump. When the elastic link stiffness is increased, fluid will be forced into the right balloon, and when the elastic link stiffness is decreased, fluid will be forced from the right balloon into the left balloon.

The file balloon.ibis was modified to read;

domain 0.00 4.00 0.00 2.00
grid 7 0.000165 10000
fluid -m 1.6 -r 1.0
#
#  graphics variables
#
visual -h 128 -w 256 -n 500 -p binary -b balloon
graphics -n 1000 -p line -b balloon
particle -d 4
#
#  some spring constants
#
spring b -b 1.0e+6 -s 4.0e+7
spring r -b 1.0e+6 -s 4.0e+7 -t 4.0e+6
#
#  The polygon is activated with -A 1
#
polygon -A 1
 first 2.50 0.875
 carc -n 512
  2.50 1.125
  0.375 1
 ray 1.50 1.125 -n 256 -e 4.0e+6
 ray 
 carc -n 512
  2.50 1.125
  0.375 -1
 ray 2.50 0.875 -n 256 -e 4.0e+6
 end

The immersed boundary points on the right circular arc will be actively controlled. These points will be the first 512 points passed to actmov, but all of the points in the polygon will be passed on every time step.

Because there are no sources/sinks in this problem, the template subroutine getsrc is not modified.

The active control of the balloon will be accomplished by sinusoidally modulating the elastic link resting lengths of the right balloon segment by the function $1 + \sin(2 \pi t/p)/2$where t is the time and p is a specified period. The code that accomplishes this task is;

c
      subroutine actmov
c
c  this routine performs the active motion on
c  entity n.
c
      include 'parm.inc'
      include 'active.inc'
      include 'domain.inc'
c
c  local variable definitions here.
c
      intger i
      double precision arg, period, modul
      double precision rest0(512)
      save rest0
c
c  save the initial stiffness coefficient
c    they are constant along the balloons, so
c    only need one
c
      if ( nt.eq.ntstart ) then
        do i = 1, 512
          rest0(i) = rest(i)
        enddo
      endif
c
c  modulate the forces
c
      period = 5000.0d0
      arg    = 8.0d0*atan(1.0d0)*dble(nt-ntstart)/period
      modul  = 1.0d0 + (dsin(arg)/2.0d0)
      do i = 1, 512
        rest(i) = rest0(i)*modul
      enddo
c
      return
      end

Output from this simulation is shown in the next figures. Notice that when the left balloon is small, the right balloon is large and vise-versa.


next up previous
Next: Breathing balloon Up: Balloon program examples Previous: Balloon program examples
David Eyre
6/19/1998