chatab
C CHATAB SOURCE FANDEUR 22/03/01 21:15:01 11301 subroutine chatab implicit real*8(a-h,o-z) implicit integer (i-n) * * ce sous programme permet de changer fabriquer un chargement * defini par deux tables pour le type demandé. ou pour tous les types. * il ne travaille que sur les chpoints. * -INC PPARAM -INC CCOPTIO -INC SMCHARG -INC SMCOORD -INC SMCHPOI -INC TMTRAV -INC SMELEME -INC SMLREEL -INC SMTABLE segment nominc character*(LOCOMP) noinc(ml) integer noh(ml) endsegment segment mtempo real*8 tempo(ml) endsegment segment iliste integer listem (ibon) endsegment segment mbbb real*8 bbb(ntem,nnin,nnnoe) endsegment pointeur mlree4.mlreel segment ipass(nnin) * segment icpr(nbpts) character*4 moty if(ierr.ne.0) return moty=' ' segact mcharg ik= kcharg(/1) * * on verifie que le type de chargement demandé existe * ibon=0 do ikk=1,ik if(chanom(ikk).eq.moty) ibon=ibon+1 enddo if(ibon.eq.0) then return endif * * on verifie que les chargements concernés ont des objets chpoint * ibon=0 iprem=0 do ikk=1,ik if(chanom(ikk).eq.moty)then icharg=kcharg(ikk) segact icharg if(chatyp.eq.'CHPOINT ') then ibon=ibon+1 if(iprem.eq.0) iprem=ikk endif endif enddo if(ibon.eq.0) then return endif * * on duplique l'objet en sautant ceux qui vont etre transformés * N= ik - ibon + 1 segini mchar1 ipl=1 do ikk=1,N if(chanom(ikk).eq.moty)then icharg=kcharg(ikk) if(chatyp.ne.'CHPOINT ') then mchar1.kcharg(ipl)=kcharg(ikk) mchar1.CHANAT(ipl)=CHANAT(ikk) mchar1.CHANOM(ipl)=CHANOM(ikk) mchar1.CHAMOB(ipl)=CHAMOB(ikk) mchar1.CHALIE(ipl)=CHALIE(ikk) ipl=ipl+1 endif endif enddo * * debut du travail * * on fabrique la liste des inconnues * i1fois = 0 ifochs = -99 ml=100 segini nominc nnin=0 do ikk=1,ik if(chanom(ikk).eq.moty)then icharg=kcharg(ikk) if(chatyp.eq.'CHPOINT ') then mchpoi=ichpo1 segact mchpoi if (i1fois.eq.0) then i1fois = 1 ifochs = mchpoi.ifopoi endif if (mchpoi.ifopoi .ne. ifochs) then interr(1)=mchpoi.ifopoi interr(2)=ifochs interr(3)=ifour c-dbg write(ioimp,*) '1132 chatab',ikk,mchpoi ifochs=ifour endif do ipc=1,ipchp(/1) msoupo=ipchp(ipc) segact msoupo do nc=1,nocomp(/2) do nomb=1,nnin if( nocomp(nc).eq.noinc(nomb)) go to 1 enddo nnin=nnin+1 if( nnin.gt.ml) then ml= ml+100 segadj nominc endif noinc(nnin)=nocomp(nc) noh(nnin)=noharm(nc) 1 continue enddo enddo endif endif enddo * * on fabrique la liste des temps * ml = 500 segini mtempo segini iliste mlree3=0 do ikk=1,ik if(chanom(ikk).eq.moty)then icharg=kcharg(ikk) if(chatyp.eq.'CHPOINT ') then mlree1=ichpo2 do ikkm1= 1,ikk-1 if( listem(ikkm1) . eq . mlree1) go to 2 enddo listem(ikk)=mlree1 if(mlree3.eq.0) then segini,mlree3=mlree1 else segact mlree1 segini mlree2 i3=1 i1=1 3 continue i1=i1+1 else i3=i3+1 endif if(i1+i3.le.jg1+jg3)then if( i1.gt. jg1) then i3=i3-1 do ifi=1,jg3-i3 enddo elseif (i3.gt.jg3) then i1=i1-1 do ifi=1,jg1-i1 enddo else go to 3 endif endif jg=i2-1 segsup mlree3 segadj mlree2 mlree3=mlree2 segdes mlree1 endif endif endif 2 continue enddo xprec= xmax /ntem * 1.d-4 * * on fabrique la liste des points concernés * segini icpr nnnoe=0 do ikk=1,ik if(chanom(ikk).eq.moty)then icharg=kcharg(ikk) if(chatyp.eq.'CHPOINT ') then mchpoi=ichpo1 do ipc=1,ipchp(/1) msoupo=ipchp(ipc) meleme=igeoc segact meleme do iel=1,num(/2) ip=num(1,iel) if(icpr(ip).eq.0) then nnnoe=nnnoe+1 icpr(ip)=nnnoe endif enddo enddo endif endif enddo nbnn=1 nbelem=nnnoe nbsous=0 nbref=0 segini ipt4 ipt4.itypel=1 do ip=1,icpr(/1) if(icpr(ip).ne.0) then ipt4.num(1,icpr(ip))=ip endif enddo segdes ipt4 * * on cree le segment mtrav et on cree le segment contenant tous les * ntem chpoints * * write(6,*)'ntem nnin nnnoe tot ',ntem,nnin,nnnoe,ntem*nnin*nnnoe segini mtrav segini mbbb * * on remplit les tableaux bbb en prenant chargement par chargement * segini ipass do ikk=1,ik if(chanom(ikk).eq.moty)then icharg=kcharg(ikk) if(chatyp.eq.'CHPOINT ') then * write(6,*) ' traitement du chargement numero ',ikk mchpoi=ichpo1 mlree1=ichpo2 mlree4=ichpo3 segact mlree4 segact mlree1 do ipc=1,ipchp(/1) msoupo=ipchp(ipc) meleme=igeoc segact meleme mpoval=ipoval segact mpoval * on cherche la correspondance nocomp -> noinc do ipu=1,nocomp(/2) do jpu=1,nnin if( nocomp(ipu).eq.noinc(jpu)) then ipass (ipu)=jpu go to 5 endif enddo 5 continue enddo * on boucle sur les temps I1=1 i3=1 6 continue if( i1.eq.1) then else endif i1=I1+1 else if(i1.eq.jg1) then else i1=i1+1 go to 6 endif endif do ipp=1,vpocha(/1) ie=icpr(num(1,ipp)) do inn=1,vpocha(/2) icomp=ipass(inn) bbb(i3,icomp,ie)=bbb(i3,icomp,ie)+vpocha(ipp,inn)*coe enddo enddo i3=i3+1 if(i3.le.jg3) go to 6 segdes mpoval,meleme enddo segdes mlree1,mlree4,icharg endif endif enddo * * il faut creer le chargement de type table * nc=nnin n=nnnoe m=ntem segini mtab1,mtab2 mtab1.mlotab=ntem mtab2.mlotab=ntem do i=1,ntem mtab1.mtabti(i)='ENTIER' mtab1.mtabii(i)=i-1 mtab1.mtabtv(i)='CHPOINT ' mtab2.mtabti(i)='ENTIER' mtab2.mtabii(i)=i-1 mtab2.mtabtv(i)='FLOTTANT' nsoupo=1 nat=1 segini mchpoi mtab1.mtabiv(i)=mchpoi mochde=' ' mtypoi='FORCES' ifopoi=ifochs jattri(1)=2 segini msoupo ipchp(1)=msoupo igeoc=ipt4 segini mpoval ipoval=mpoval do io=1,nnin nocomp(io)=noinc(io) noharm(io)=noh(io) enddo do ip=1,nc do io=1,n vpocha(io,ip) = bbb(i,ip,io) enddo enddo segdes mpoval segdes msoupo segdes mchpoi enddo segdes mtab1,mtab2 segdes mlree3 segini icharg mchar1.kcharg(ipl)=icharg mchar1.chanat(ipl)='FORCE' mchar1.CHANOM(ipl)=CHANOM(iprem) mchar1.CHAMOB(ipl)=CHAMOB(iprem) mchar1.CHALIE(ipl)=CHALIE(iprem) CHATYP='TABLE ' ichpo1=mtab2 ichpo2=mtab1 segdes icharg segdes mchar1,mcharg c return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales