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