next up previous
Next: IBIS file formats: Up: IBIS examples: Previous: Flow over a clump:

A tentitcle with active cilia

This example, also shown on the IBIS home page models a ciliated tenticle. The cilia are modeled as line segments of immersed boundary points attached to a circular set of points that model the tenticle. The IBIS program to specify the tenticle and ciliar is

domain 0.0 1.0 0.0 2.0
grid 6 0.0000165 1000
fluid -m 1.0 -r 1.0 
bforce -y -1000.0
visual -h 512 -w 256 -n 20 -p binary -b bryo
graph -n 200 -p line -b bryol
particle -d 4
#
#  reset default springs stuff
#
spring l -b 0.0 -s 0.0 -t 10000000.
spring c -t 40000000.
spring L -s 40000000.
#
#  centered tenticle at (0,0)
#
circle 0.5 1.0 0.36363636 -N 7
line  0.86363636  1.00000000  0.95454545  1.00000000 -n 12 -A 1
line  0.85124576  1.09411602  0.93905719  1.11764502 -n 12 -A 2
line  0.85124576  0.90588398  0.93905719  0.88235498 -n 12 -A 3
line  0.13636364  1.00000000  0.04545454  1.00000000 -n 12 -A 4
line  0.14875424  0.90588398  0.06094281  0.88235498 -n 12 -A 5
line  0.14875424  1.09411602  0.06094281  1.11764502 -n 12 -A 6
link 1 7 1 
link 2 7 1 
link 3 7 1 
link 4 7 1 
link 5 7 1 
link 6 7 1

Notice that a link command is used to attach the cilia to the tentacle, and that each cilia is active.

The cilia are dragged over a 90 degree arc by advancing the tether points $d\theta$ over each time step. When the arc of cilia have been advanced over a full sweep, then the tether points and the immersed boundary points of the cilia are rest to the start position of the arc.

There are six cilia, and actmov is called six times during each time step. The variables theta0 are the angle of the cilia (in global coordinates measured for the point the attach to the tenticle) immediately after the recovery stroke and before the power stroke. The variable dth is the incremental difference between tetha0 and the desired angle of the cilia at the current time. Notice that theta0 is set once for the entire simulation, and that dth is advanced only if the time is advanced. Finally, notice that the tether points are moved during each call to actmov, but the immersed boundary points are only moved during the recovery stroke.

c
      subroutine actmov
c
c  this routine performs the active motion on
c  entity n.  The data is passed on to afact.
c
      include 'parm.inc'
      include 'active.inc'
      include 'domain.inc'
c
c--local variables for bryosome problem-----------------
c
      integer i,j,k,npos,mshift,irad, nct
      double precision pi,base(6),theta0(6),dist,dth
      double precision cang,sang,rad,theta
c
c--save some variables for future reference------------
c
      save irad, mshift, rad, nct, pi, theta0, dth
c
c--initialize the saved variables--perform once only---
c
      npos = 120
      if (irad.eq.0) then
        irad = 1                                         
        rad = dist(tethx(1),tethy(1),tethx(2),tethy(2))
        mshift = npos/2
        pi = 4.0d0*datan(1.0d0)
        theta0(1) = (-pi/4.0d0)
        theta0(2) = (pi/12.0d0) - (pi/4.0d0)
        theta0(3) = (-pi/12.0d0) - (pi/4.0d0)
        theta0(4) = (5.0d0*pi/4.0d0)
        theta0(5) = (pi/12.0d0) + (5.0d0*pi/4.0d0)
        theta0(6) = (-pi/12.0d0) + (5.0d0*pi/4.0d0)
      endif
c
c--advance the time dependent saved variables only if 
c   this is the first call to actmov for a given time --
c
      if (nct.ne.nt) then
        nct = nt
        mshift = mod(mshift+1,npos)
        dth = mshift*pi/2.0/dble(npos)
      endif
c
c--using the entity label, determine the angle of the
c    cilia----------------------------------------------
c
      if (elab.le.3) then
        theta = theta0(elab) + dth
      else
        theta = theta0(elab) - dth
      endif
      cang   = dcos(theta)
      sang   = dsin(theta)
c
c--move the tether points by delta theta---------------
c----reset to the start if a sweep has been completed--
c
      do i=2,nels
        tethx(i) = (rad*dble(i-1)*cang) + tethx(1)
        tethy(i) = (rad*dble(i-1)*sang) + tethy(1)
      enddo
c
c--move the immersed boundary points to the start------
c----if a sweep has been completed---------------------
c
      if ( mshift .eq. 0 ) then
        do i=2,nels
          ibptx(i)  = tethx(i)
          ibpty(i)  = tethy(i)
        enddo
      endif
c
      return
      end     
c

Output from this example is shown on the IBIS home page and below.



next up previous
Next: IBIS file formats: Up: IBIS examples: Previous: Flow over a clump:
David Eyre
6/19/1998