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