splitag
C SPLITAG SOURCE CB215821 24/04/12 21:17:16 11897 & ipchc2,siezo) *====================================================================== * On a un seul modele defini sur des seg2 definissant des cables * on veut fabriquer un modele intermediaire comportant une sous zone * par cable pour appliquer des tensions a leurs extremites et * calculer des pertes de precontraintes * * on partitione : * geometrie * modele ipmodl ---> ipmod2 * champs de caracteristiques ipcara ---> ipcar2 * champs de precontraintes si presents ipchc1 ---> ipchc2 * * routine appelee par precop *====================================================================== IMPLICIT INTEGER(I-N) -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMELEME -INC SMMODEL -INC CCHAMP -INC SMCOORD segment icpr(3,nbpts) segment iextr(0) segment sielc integer ideb(niz),ifin(niz),nbcz,isens(2,nbele),idejvu(nbele) endsegment * stockage depointeurs sur des segment sielc segment siezo integer iezon(nsous) endsegment * MMODEL = ipmodl segact MMODEL nsous = kmodel(/1) segini siezo nbcabt=0 iz=1 C===== do 1000 isous=1,nsous imodel= kmodel(isous) segact imodel meleme = imamod * segact meleme nbele = num(/2) niz=50 segini sielc iezon(isous)=sielc C segini iextr segini icpr C icpr(1,ip) contient le nombre d elements connectes au pt ip C icpr(2,ip) et (3,ip) les numeros des elements en question do iel=1,num(/2) do j=1,num(/1) ip = num(j,iel) icpr(1,ip) = icpr(1,ip)+1 if(icpr(1,ip).le.2) then icpr(icpr(1,ip)+1,ip) =iel else C maillage incorrect deux cables se coupent segsup iextr,icpr,sielc,siezo iret=0 return endif enddo enddo C tableau des extremites do iel=1,num(/2) do j=1,num(/1) if(icpr(1,num(j,iel)).eq.1) iextr(**)= num(j,iel) enddo enddo C write(6,*) (iextr(k),k=1,iextr(/1)) C C on fabrique de toute facon des objets temporaires C ----- reorientation et decoupages C il y a plusieurs cables dans le modele C isens(1,n) numero du nieme element ordonne dans le maillage originel C isens(2,n) son sens de parcours / par rapport au pt de depart nbc =0 inel=0 ip1= iextr(1) iextr(1)=0 C 1999 continue nbc =nbc+1 if (nbc.gt.niz) then niz = niz+50 segadj sielc endif inel=inel+1 iel=icpr(2,ip1) idejvu(iel)=inel isens(1,inel)=iel ideb(nbc)=inel if(num(2,iel).eq.ip1) then ip1=num(1,iel) isens(2,inel)=2 else ip1=num(2,iel) isens(2,inel)=1 endif C ---- recherche suite des elements if(icpr(1,ip1).eq.1) then C petit rattrapage pour fantaisie ( cables a 1 seul element ) i2= ip1 goto 2001 endif 1998 continue do 2000 ik=2,3 iel=icpr(ik,ip1) if(idejvu(iel).ne.0) goto 2000 if(num(1,iel).eq.ip1) then ise=1 elseif(num(2,iel).eq.ip1) then ise=2 endif C write(6,*) 'iel ip1 num ',iel,ip1, num(1,iel),num(2,iel) inel=inel+1 idejvu(iel)=inel isens(1,inel)=iel isens(2,inel)=ise ip1=i2 2000 continue goto 1998 2001 continue ifin(nbc)=inel C write(6,*) ' fin de la partition ' C write(6,*) nbc,ideb(nbc),ifin(nbc) C recherche d un nouveau depart do ik=1,iextr(/1) enddo do ik=1,iextr(/1) if(iextr(ik).ne.0) then ip1 =iextr(ik) iextr(ik)=0 goto 1999 endif enddo C fin du traitement des cables elementaires C endif nbcz=nbc C write(6,*) ' nombre de cables crees ' ,nbc,nbcz segdes sielc segsup icpr,iextr nbcabt=nbcabt+nbc 1000 continue 4444 format(10I4) C======== * * MCHELM caracteristiques MCHEL2 caract splitees * MCHEL3 contraintes init MCHEL4 cont int splitees * * le champ de caracteristiques n1=nbcabt n3=6 MCHELM = ipcara segact MCHELM L1=titche(/1) segini,MMODE2,MCHEL2 mchel2.ifoche=ifoche mchel2.titche=titche ipmod2= mmode2 ipcar2= mchel2 C if(ipchc1.ne.0) then MCHEL3 =ipchc1 SEGACT MCHEL3 L1=MCHEL3.titche(/1) segini MCHEL4 ipchc2=MCHEL4 mchel4.titche=mchel3.titche mchel4.ifoche=mchel3.ifoche else ipchc2 =0 endif C mn3=infmod(/1) nfor=formod(/2) nmat=matmod(/2) nparmo=0 C idmod=0 do 2100 isous=1,nsous imodel = kmodel(isous) mchaml=ichaml(isous) segact imodel,mchaml meleme = imamod sielc=iezon(isous) segact sielc C======= do 2150 ibc = 1,nbcz idmod=idmod+1 NBSOUS=0 NBREF=0 NBNN=2 NBELEM=ifin(ibc)-ideb(ibc)+1 C le meleme segini ipt1 ipt1.itypel=2 iii = 0 do inel=ideb(ibc),ifin(ibc) iel=isens(1,inel) iii = iii+1 if(isens(2,inel).eq.1) then do ip=1,2 ipt1.num(ip,iii)=num(ip,iel) enddo else do ip=1,2 ipt1.num(ip,iii)=num(3-ip,iel) enddo endif enddo C------------- C call ecmail(ipt1) nobmod=0 segini imode2 mmode2.kmodel(idmod) = imode2 C C le modele C imode2.imamod = ipt1 imode2.nefmod=nefmod imode2.conmod=conmod do i=1,infmod(/1) imode2.infmod(i)=infmod(i) enddo do i=1,nfor imode2.formod(i) = formod(i) enddo do i=1,nmat imode2.matmod(i)=matmod(i) enddo C C ------- les caracteristiques C mchel2.conche(idmod)= conche(isous) mchel2.imache(idmod)= ipt1 C ------- on a seulement besoin de 'YOUN' et 'SECT' n2=2 segini mcham2 mchel2.ichaml(idmod)= mcham2 C do i=1,n3 mchel2.infche(idmod,i)=infche(isous,i) enddo C N1EL= NBELEM N2EL= 0 N2PTEL= 0 C ipos=0 do ic=1,ielval(/1) ipos=1 if (nomche(ic).eq.'YOUN'.or.nomche(ic).eq.'SECT'. . or.nomche(ic).eq.'FF '.or.nomche(ic).eq.'PHIF') then if (nomche(ic).eq.'SECT'.or.nomche(ic).eq.'PHIF') ipos=2 melval=mchaml.ielval(ic) segact melval N1PTEL= velche(/1) if(velche(/2).eq.1) N1EL=1 segini melva2 mcham2.ielval(ipos)= melva2 mcham2.nomche(ipos)=nomche(ic) mcham2.typche(ipos)=typche(ic) if(velche(/1).eq.1.and.velche(/2).eq.1) then melva2.velche(1,1)=velche(1,1) else iii=0 do inel=ideb(ibc),ifin(ibc) iii=iii+1 iel=isens(1,inel) if(isens(2,inel).eq.1) then do ip=1,velche(/1) melva2.velche(ip,iii) = velche(ip,iel) enddo else id=2 if(velche(/1).eq.2) id=3 do ip=1,velche(/1) melva2.velche(ip,iii) = velche(id-ip,iel) enddo endif enddo endif endif enddo C C les precontraintes C if(ipchc1.ne.0) then C mchel4.titche=mchel3.titche C mchel4.ifoche=mchel3.ifoche mchel4.imache(idmod)= ipt1 mcham3=mchel3.ichaml(isous) mchel4.conche(idmod)= mchel3.conche(isous) do i=1,n3 mchel4.infche(idmod,i)=mchel3.infche(isous,i) enddo C segact mcham3 n2=mcham3.ielval(/1) segini mcham4 mchel4.ichaml(idmod)= mcham4 C N1EL= NBELEM N2EL= 0 N2PTEL= 0 C do ic=1,n2 mcham4.nomche(ic)=mcham3.nomche(ic) mcham4.typche(ic)=mcham3.typche(ic) melval = mcham3.ielval(ic) segact melval N1PTEL= velche(/1) if(velche(/2).eq.1) N1EL=1 segini melva4 mcham4.ielval(ic)=melva4 C if(velche(/1).eq.1.and.velche(/2).eq.1) then melva4.velche(1,1)=velche(1,1) else iii=0 do inel=ideb(ibc),ifin(ibc) iel=isens(1,inel) iii=iii+1 if(isens(2,inel).eq.1) then do ip=1,velche(/1) melva4.velche(ip,iii) = velche(ip,iel) enddo else do ip=1,velche(/1) melva4.velche(ip,iii) = velche(3-ip,iel) enddo endif enddo endif enddo endif C 2150 continue 2100 continue end
© Cast3M 2003 - Tous droits réservés.
Mentions légales