xty1
C XTY1 SOURCE CB215821 20/11/25 13:43:35 10792 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) INTEGER NBO -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMLMOTS -INC SMELEME -INC SMCOORD segment itrav * izon : num de zone dans 2 chp d'un point * ipos : num de pt dans zone d'un point * integer izon(nbpts),ipos(nbpts) * * nbop : nb de terme dans produit 1-zonei 2-zonej * integer nbop(nbz1,nbz2) * * icpos1 icpos2 : num composante zone a traiter * integer icpos1(nbopma,nbz1,nbz2),icpos2(nbopma,nbz1,nbz2) * endsegment * NBO=0 xret=0.d0 * * creation de itrav * mlmot1=mlmotx segact mlmot1 mlmot2=mlmoty segact mlmot2 if (ierr.ne.0) return mchpo1=mchpot segact mchpo1 nbz1=mchpo1.ipchp(/1) mchpo2=ich2 segact mchpo2 nbz2=mchpo2.ipchp(/1) segini itrav * * remplissage de itrav a partir du deuxieme champ * do 10 isoupo=1,nbz2 msoup2=mchpo2.ipchp(isoupo) segact msoup2 mpova2=msoup2.ipoval segact mpova2 ipt2=msoup2.igeoc segact ipt2 do 15 iel=1,ipt2.num(/2) ip=ipt2.num(1,iel) izon(ip)=isoupo ipos(ip)=iel 15 continue 10 continue * * travail effectif : boucle su r le premier chpoint * on fabriquera au vol les nbop icpos1 et icpos2 si necessaire * do 20 isoupo=1,nbz1 msoup1=mchpo1.ipchp(isoupo) segact msoup1 mpova1=msoup1.ipoval segact mpova1 ipt1=msoup1.igeoc segact ipt1 ieldin=1 100 continue do 110 ieldeb=ieldin,ipt1.num(/2) izocou=izon(ipt1.num(1,ieldeb)) if(izocou.ne.0) goto 115 110 continue goto 20 115 continue msoup2=mchpo2.ipchp(izocou) if (nbop(isoupo,izocou).eq.0) then do 30 im=1,nbopma do 35 ic1=1,msoup1.nocomp(/2) 35 continue goto 30 40 continue do 45 ic2=1,msoup2.nocomp(/2) if (msoup1.noharm(ic1).ne.msoup2.noharm(ic2)) goto 45 45 continue goto 30 50 continue nbo=nbop(isoupo,izocou)+1 nbop(isoupo,izocou)=nbo icpos1(nbo,isoupo,izocou)=ic1 icpos2(nbo,isoupo,izocou)=ic2 30 continue if (nbo.eq.0) nbop(isoupo,izocou)=-1 endif do 60 ielcou=ieldeb+1,ipt1.num(/2) ipt=ipt1.num(1,ielcou) izon2=izon(ipt) if (izon2.ne.izocou) goto 70 60 continue ielcou=ipt1.num(/2)+1 70 continue mpova2=msoup2.ipoval do 80 ic=1,nbop(isoupo,izocou) ic1=icpos1(ic,isoupo,izocou) ic2=icpos2(ic,isoupo,izocou) do 90 iel=ieldeb,ielcou-1 xret=xret+mpova1.vpocha(iel,ic1)* > mpova2.vpocha(ipos(ipt1.num(1,iel)),ic2) 90 continue 80 continue ieldin=ielcou if (ieldin.le.ipt1.num(/2)) goto 100 20 continue * c'est fini on nettoie segsup itrav if (mchpo1.ne.mchpo2) then do 150 isoupo=1,nbz2 msoup2=mchpo2.ipchp(isoupo) mpova2=msoup2.ipoval ipt2=msoup2.igeoc 150 continue endif end
© Cast3M 2003 - Tous droits réservés.
Mentions légales