C FORM SOURCE MB234859 25/02/27 21:15:04 12111 C======================================================================= C= F O R M = C= ------- = C= = C= FONCTEUR CAST3M 'FORME' DE MISE A JOUR DE CONFIGURATIONS : = C= ---------------------------------------------------------- = C= (CONF2) (CAR2) = 'FORME' (CONF1) (CHPO1) (MODL1 CAR1) ; = C= = C= UTILISATION : SANS OPERANDE MET DANS LA PILE LE SEGMENT MCOORD C= : AVEC UN OBJET CONFIGURA, ACTIVE CETTE CONFIGURATION C= : AVEC UN CHAMPOINT, CREE LES COORD = COURANTES+DEFORMEE C= PUIS ACTIVE CETTE CONFIG C= : AVEC CHPOINT ET CONFIGUR CREE ET ACTIVE LA CONFIGU = C= CONFIGUR + DEFORMEE ISSU DE CHPOINT. C= SERT A NOMMER, ACTIVER OU CREER UNE CONFIGURATION C'EST-A-DIRE UN C= CHAMP DE COORDONNEES SUPPORT. C= = C= ARGUMENTS : = C= ----------- = C= CONF1 (CONFIGU) Champ de coordonnees support (configuration) = C= CHPO1 (CHPOINT) Champ de deplacements sur la structure = C= MODL1 (MMODEL) Modele de la structure etudiee (facultatif) = C= CAR1 (MCHAML) Caracteristiques geometriques (facultatif) = C= Sous-type 'CARACTERISTIQUES' = C= = C= RESULTATS : = C= ----------- = C= CONF2 (CONFIGU) Champ de coordonnees support actualise = C= CAR2 (MCHAML) Caracteristiques geometriques actualisees = C======================================================================= SUBROUTINE FORM IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCASSIS -INC SMCOORD POINTEUR MXCA.MCOORD -INC SMELEME -INC SMCHPOI character*16 icha LOGICAL BUR,ROT CHARACTER*(LOCOMP) MDDL CHARACTER*(LOCOMP) NODEF(3),NODEG(3) CHARACTER*(LOCOMP) RODEF(3),RODEG(3) DATA NODEF / 'UX ','UY ','UZ ' / DATA NODEG / 'UR ','UZ ','UT ' / DATA RODEF / 'RX ','RY ','RZ ' / DATA RODEG / 'RR ','RZ ','RT ' / C * attention aux assistants .... if (NBESC.NE.0) then if (iimpi .eq. 1234) & write(ioimp,*) ' il faut bloquer les assistants' ith=0 ith=oothrd if(ith.ne.0) then call erreur (1010) return endif do ith=1,nbesc mesins= mescl(ith) segact mesins 20 if(nbins.ne.0) then * write(6,*)'on attend la fin des esclaves ith nbins',ith,nbins segdes mesins*record segact mesins*(mod,ecr=1) go to 20 endif segdes mesins*record enddo mestra=imestr SEGACT MESTRA*MOD if (iimpi .eq. 1234) & write(ioimp,*) ' assistants en attente' end if SEGACT,MCOORD c* NBPTX=XCOOR(/1)/idimp1 c* NBPTX=NBPTS MCOO = 0 IPTC = 0 IPMODL = 0 CALL LIROBJ('CONFIGUR',MCOO,0,IRET) CALL LIROBJ('CHPOINT ',IPTC,0,IRET) CALL LIROBJ('MMODEL ',IPMODL,0,IRET) IF (IERR.NE.0) GOTO 10 ** write(6,*) 'form mcoo iptc ipmodl',mcoo,iptc,ipmodl IF (MCOO.EQ.0.AND.IPTC.EQ.0) THEN * il faut rendre la configuration courante segact mcoord mrotat=mrota CALL ECROBJ('CONFIGUR',MCOORD) goto 10 ENDIF IF (IPTC .NE. 0) THEN CALL ACTOBJ('CHPOINT ',IPTC,1) ENDIF C= Cas d'un MCHAML de CARACTERISTIQUES a TRANSPORTER IF (IPMODL .NE. 0) THEN IF (IPTC.EQ.0) THEN MOTERR(1:8)='CHPOINT' CALL ERREUR(37) RETURN ENDIF CALL LIROBJ('MCHAML ',IPIN,1,IRET) IF (IERR .NE. 0) GOTO 10 CALL ACTOBJ('MMODEL ',IPMODL,1) CALL ACTOBJ('MCHAML ',IPIN ,1) CALL REDUAF(IPIN,IPMODL,IPCH1,0,IR,KER) IF (IR .NE. 1) CALL ERREUR(KER) IF (IERR .NE. 0) GOTO 10 C Mise a jour des caracteristiques materielles CALL FORMCH(IPMODL,IPCH1,IPTC,IRET,IPCH2,MCOORD) IF (IRET.EQ.0.OR.IERR.NE.0) GOTO 10 CALL ECROBJ('MCHAML ',IPCH2) IF (IERR .NE. 0) GOTO 10 c-dbg call zpchel(ipch1,0) c-dbg call zpchel(ipch2,0) ENDIF idimp1=IDIM+1 IF (IPTC.EQ.0) THEN IF (MCOO.EQ.0) THEN SEGINI,MXCA=MCOORD CALL ECROBJ('CONFIGUR',MXCA) ELSE IF(MXCA.NE.MCOORD) THEN MXCA=MCOO SEGACT,MXCA NBPTA=MXCA.XCOOR(/1)/idimp1 IF (NBPTA.NE.NBPTX) THEN c* NBPTS=NBPTX SEGADJ,MXCA DO i=NBPTA*idimp1+1,NBPTS*idimp1 MXCA.XCOOR(i)=XCOOR(i) ENDDO ENDIF MCOORD=MXCA ENDIF ENDIF IF (IPMODL .NE. 0) THEN mclcnf=mcoord CALL ACTOBJ('MCHAML ',IPCH2,1) ENDIF ELSE C Mise a jour des coordonnes en ajoutant le champ de deplacement IF (MCOO.NE.0) THEN MXCA=MCOO SEGACT,MXCA NBPTA=MXCA.XCOOR(/1)/idimp1 IF (NBPTA.NE.NBPTX) THEN c* NBPTS=NBPTX SEGADJ,MXCA DO i=NBPTA*idimp1+1,NBPTS*idimp1 MXCA.XCOOR(i)=XCOOR(i) ENDDO ENDIF MCOORD=MXCA ENDIF bur=((ifour.eq.0).or.(ifour.eq.1)) ncmax=3 ** write(6,*) 'FORM ifomod ifour',ifomod,ifour ROT=.FALSE. MCHPOI=IPTC ** call ecchpo(mchpoi,1) DO iSoup=1,IPCHP(/1) MSOUPO=IPCHP(iSoup) MPOVAL=IPOVAL DO IC=1,NOCOMP(/2) MDDL=NOCOMP(IC) DO INUM=1,3 IF (BUR) THEN IF (RODEG(INUM).EQ.MDDL) ROT=.TRUE. ELSE IF (RODEF(INUM).EQ.MDDL) ROT=.TRUE. ENDIF ENDDO ENDDO ENDDO ** write(6,*) 'form bur rot',bur,rot,ncmax,ifomod,ifour SEGINI,MXCA=MCOORD * definition eventuelle des rotations MROTA1=0 MROTAT=0 IF(ROT) THEN IF (MROTA.NE.0) THEN MROTAT=MROTA SEGINI,MROTA1=MROTAT ELSE idimr=3 SEGINI,MROTA1 ** write(6,*) 'mrota1',mrota1 ENDIF MXCA.MROTA=MROTA1 ENDIF DO iSoup=1,IPCHP(/1) MSOUPO=IPCHP(iSoup) MPOVAL=IPOVAL IPT2=IGEOC NbElt=IPT2.NUM(/2) DO IC=1,NOCOMP(/2) MDDL=NOCOMP(IC) DO INUM=1,NCMAX IF (BUR) THEN IF (NODEG(INUM).EQ.MDDL) GOTO 81 ELSE IF (NODEF(INUM).EQ.MDDL) GOTO 81 ENDIF ENDDO GOTO 70 81 DO iElt=1,NbElt IP=(IPT2.NUM(1,iElt)-1)*idimp1+INUM MXCA.XCOOR(IP)=MXCA.XCOOR(IP)+VPOCHA(iElt,IC) ENDDO 70 CONTINUE IF(ROT) THEN DO INUM=1,3 IF (BUR) THEN IF (RODEG(INUM).EQ.MDDL) GOTO 82 ELSE IF (RODEF(INUM).EQ.MDDL) GOTO 82 ENDIF ENDDO GOTO 71 82 DO iElt=1,NbElt IP=IPT2.NUM(1,iElt) MROTA1.XROTA(inum,ip)=MROTA1.XROTA(inum,IP)+ > VPOCHA(iElt,IC) ENDDO 71 CONTINUE ENDIF ENDDO ENDDO IF(MROTA.NE.0) SEGDES MROTA SEGDES MCOORD MCOORD=MXCA SEGDES,MCOORD IF(MROTA1.NE.0) SEGDES MROTA1 CALL ECROBJ('CONFIGUR',MCOORD) ENDIF 10 CONTINUE C * attention aux assistants .... if (NBESC.NE.0) then C * il faut liberer le segment de dialogue mestra=imestr SEGDES MESTRA end if c return segact mcoord if(.false.) then call quenom(icha) write(6,*) 'FORM nouvelle configuration', mcoord,mrota,icha call trbac endif END