form
C FORM SOURCE PV090527 25/01/16 21:15:03 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 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 IF (IERR.NE.0) GOTO 10 IF (IPTC .NE. 0) THEN ENDIF C= Cas d'un MCHAML de CARACTERISTIQUES a TRANSPORTER IF (IPMODL .NE. 0) THEN IF (IPTC.EQ.0) THEN MOTERR(1:8)='CHPOINT' RETURN ENDIF IF (IERR .NE. 0) GOTO 10 IF (IERR .NE. 0) GOTO 10 C Mise a jour des caracteristiques materielles IF (IRET.EQ.0.OR.IERR.NE.0) GOTO 10 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 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 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 IF (IFOMOD.EQ.0.OR.IFOMOD.EQ.1) THEN BUR=.TRUE. NCMAX=2 ELSE IF (IFOMOD.EQ.4.OR.IFOMOD.EQ.5) THEN BUR=.TRUE. NCMAX=1 ELSE IF (IFOMOD.EQ.-1) THEN BUR=.FALSE. NCMAX=2 ELSE IF (IFOMOD.EQ.3) THEN BUR=.FALSE. NCMAX=1 ELSE BUR=.FALSE. NCMAX=3 ENDIF ROT=.FALSE. MCHPOI=IPTC DO iSoup=1,IPCHP(/1) MSOUPO=IPCHP(iSoup) MPOVAL=IPOVAL DO IC=1,NOCOMP(/2) MDDL=NOCOMP(IC) DO INUM=1,NCMAX IF (BUR) THEN IF (RODEG(INUM).EQ.MDDL) ROT=.TRUE. ELSE IF (RODEF(INUM).EQ.MDDL) ROT=.TRUE. ENDIF ENDDO ENDDO ENDDO SEGINI,MXCA=MCOORD * definition eventuelle des rotations MROTA1=0 IF(ROT) THEN IF (MROTA.NE.0) THEN SEGINI,MROTA1=MROTA ELSE SEGINI 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,NCMAX 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)-1)*idim+INUM MROTA1.XROTA(IP)=MROTA1.XROTA(IP)+VPOCHA(iElt,IC) ENDDO 71 CONTINUE ENDIF ENDDO ENDDO SEGDES MCOORD IF(MROTA.NE.0) SEGDES MROTA MCOORD=MXCA SEGDES,MCOORD IF(MROTA1.NE.0) SEGDES MROTA1 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 ** call quenom(icha) ** write(6,*) 'FORM nouvelle configuration', mcoord,icha END
© Cast3M 2003 - Tous droits réservés.
Mentions légales