subroutine arrows(u,conddat,ncond,coeg,itri,nno, $ nrtri,nelgrp,arrow,amass) implicit double precision (a-h,o-z) dimension conddat(ncond,*),u(*),coeg(2,*),itri(4,*) dimension arrow(2,*),amass(*),nelgrp(5,*) dimension xc(3),yc(3),condu(2,2) character*80 rhscha,cndcha(3),cnvcha(2),abscha,ex * common /chardata/ idrhs,idcnd,idcnv,idabs, $ rhscha,cndcha,cnvcha,abscha * do 20 iel=1,nrtri xm=0.d0 ym=0.d0 do 15 j=1,3 ivj=itri(j,iel) xc(j)=coeg(1,ivj) yc(j)=coeg(2,ivj) xm=xm+xc(j)/3.d0 ym=ym+yc(j)/3.d0 15 continue * ********************************************************* * conduction ********************************************************* * do i=1,2 do j=1,2 condu(i,j)=0.d0 enddo enddo * if(idcnd.eq.0) then ex=cndcha(1) call evalexpr(ex, xm, ym, c1, ierr) condu(1,1)=c1 ex=cndcha(2) call evalexpr(ex, xm, ym, c1, ierr) condu(1,2)=c1 ex=cndcha(3) call evalexpr(ex, xm, ym, c1, ierr) condu(2,2)=c1 condu(2,1)=condu(1,2) endif if(idcnd.eq.1) then call shepardv( i xm,ym,ncond,conddat(1,1),conddat(1,2),conddat(1,3),3, o condu(1,1)) condu(2,2)=condu(1,2) condu(1,2)=condu(2,1) endif if(idcnd.eq.2) then ielfa=macrotr(iel,itri,nelgrp) condu(1,1)=conddat(1,ielfa) condu(2,1)=conddat(2,ielfa) condu(1,2)=condu(2,1) condu(2,2)=conddat(3,ielfa) endif * call grad(ux,uy,coeg,u,itri(1,iel)) uxm = - condu(1,1)*ux - condu(1,2)*uy uym = - condu(2,1)*ux - condu(2,2)*uy da = tarea(xc,yc) do 16 j=1,3 ivj=itri(j,iel) arrow(1,ivj)=arrow(1,ivj)+da*uxm arrow(2,ivj)=arrow(2,ivj)+da*uym amass(ivj)=amass(ivj)+da 16 continue 20 continue do 30 j=1,nno if(amass(j).eq.0.d0) goto 30 arrow(1,j)=arrow(1,j)/amass(j) arrow(2,j)=arrow(2,j)/amass(j) 30 continue * return end