recomb
C RECOMB SOURCE CB215821 20/11/25 13:38:47 10792 SUBROUTINE RECOMB IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *_______________________________________________________________________ * * OPERATEUR RECO : * RECOMBINAISON EN ANALYSE MODALE. * * ANCIENNE SYNTAXE: * ================ * ******** B EST UNE BASE ELEMENTAIRE * ---------------- * X1 = RECO XA B DEPL; * X2 = RECO XA B CONT; * * ******** B EST UNE BASE COMPLEXE: STR1 EST LA STRUCTURE * ------------- POUR LAQUELLE LA * RECOMBINAISON S'EFFECTUE, ET N LE NUMERO DE * LA SOUS-STRUCTURE SI CELLE CI EST FORMEE DE * SOUS-STRUCTURES IDENTIQUES. * * X1 = RECO XA B STR1 (N) DEPL ; * X2 = RECO XA B STR1 (N) CONT ; * * XA : OBJET CHPOINT CONTENANT LES CONTRIBUTIONS MODALES * DEPL : ON RECOMBINE DES DEPLACEMENTS. X1 EST UN CHPOINT * CONT : ON RECOMBINE DES CONTRAINTES . X2 EST UN CHELEM * * PASSAGE AUX NOUVEAUX CHAMELEM PAR JM CAMPENON LE 02/91 * EXTENSION AU CAS OU XA EST UN LISTCHPO LE 7/04/2016 * * *_______________________________________________________________________ * -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMBASEM -INC SMCHPOI -INC SMLCHPO -INC SMLREEL -INC SMSOLUT -INC SMSTRUC LOGICAL L0,L1,LOGIN,LOGRE PARAMETER ( LMOOPT = 5 , IUN = 1 ) CHARACTER*4 MOOPT(LMOOPT) CHARACTER*(8) ITYPE,CTYP,TYPOBJ,TYPRET CHARACTER*(16) TYPTAB CHARACTER*72 CHARRE DATA MOOPT/'DEPL','CONT','VITE','ACCE','REAC'/ CHARACTER*12 MOCLE2(LMOOPT),MODYN DATA MOCLE2/'DEPLACEMENT','DEPLACEMENT','VITESSE','ACCELERATION' & ,'DEPLACEMENT'/ C---- Lecture de l'objet resultat + Aiguillage c qui determine (en partie) dans quel cas on est ------------------- c-----CHPOINT ILECT=0 c write(6,*) 'CHPOINT?',IRET3 IF(IRET3.EQ.1) GOTO 300 c-----LISTCHPO IF (IRET23.EQ.1) THEN * TABLE DE MODES IF (IERR.NE.0) RETURN * NOMBRE DE MODES IF (IRET.EQ.0) NMOD1=0 IF (IERR.NE.0) RETURN RETURN ENDIF c-----TABLE c write(6,*) 'TABLE?',IRET12 IF(IRET12.EQ.0) GOTO 9 C---- Lecture du mot clé ----------------------------------------------- IMOO=0 c -table PASAPAS ? c CALL LIRTAB('PASAPAS',ITPASA,0,IRET2) TYPOBJ = ' ' TYPTAB ='PASAPAS' LE=7 IRET2=0 $ IOBIN, TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE) c write(6,*) 'TABLE PASAPAS?',TYPOBJ,IVALRE,CHARRE(1:LE) IF(TYPOBJ.NE.'MOT ') GOTO 2 IF(IVALRE.NE.LE) GOTO 2 IF(CHARRE(1:LE).NE.TYPTAB) GOTO 2 ITPASA=ITAB1 IRET2=1 c si table PASAPAS on recupere le chpoint qui va bien ITRES=ITPASA IF(IMOO.EQ.0) THEN WRITE(IOIMP,*) 'OPERATEUR RECO : On attend un mot-cle' RETURN ENDIF ILECT=1 GOTO 300 2 CONTINUE c -table RESULTAT_DYNE ? c CALL LIRTAB('RESULTAT_DYNE',ITDYNE,0,IRET1) TYPOBJ = ' ' TYPTAB ='RESULTAT_DYNE' LE=13 IRET1=0 $ IOBIN, TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE) c write(6,*) 'TABLE PASAPAS?',TYPOBJ,IVALRE,CHARRE(1:LE) IF(TYPOBJ.NE.'MOT ') GOTO 9 IF(IVALRE.NE.LE) GOTO 9 IF(CHARRE(1:LE).NE.TYPTAB) GOTO 9 ITDYNE=ITAB1 IRET1=1 GOTO 100 C-----ERREUR argument entree 9 CONTINUE WRITE(IOIMP,*) 'OPERATEUR RECO : On attend un objet de type :' WRITE(IOIMP,*) '- TABLE de sous-type RESULTAT_DYNE,' WRITE(IOIMP,*) '- TABLE de sous-type PASAPAS,' WRITE(IOIMP,*) '- ou CHPOINT ou LISTCHPO' RETURN C---- Cas d'un CHPOINT ------------------------------------------------- 300 CONTINUE c A partir de quelle objet recombine t'on ? c (modele, table ou basemoda) C---- Cas d'un CHPOINT + MODELE modal ---------------------------------- IF (IRET.NE.0) THEN if (IERR.NE.0) RETURN IF(IERR .NE. 0) RETURN if (IERR.NE.0) RETURN RETURN ENDIF C---- Cas d'un CHPOINT + TABLES (LIAISONS_STATIQUES + BASE_MODALE) ----- if (ierr.ne.0) return c -si on n'a pas lu de table on va vers l'ancienne syntaxe (BASEMODA) if (iretst.eq.0.and.iretbm.eq.0) GOTO 900 c -syntaxe avec une ou des tables if (ierr.ne.0) return RETURN C---- Cas d'une TABLE de RESULTAT_DYNE --------------------------------- 100 CONTINUE ITRES = ITDYNE c qq initialisations KPSMO = 0 KCHAR = 0 KCHLIA = 0 ITLIA = 0 XTEMP = 0.D0 c Lecture obligatoire mot clé (DEPL,...) IF(IMOO.EQ.0) THEN WRITE(IOIMP,*) 'OPERATEUR RECO : On attend un mot-cle' RETURN ENDIF c + temps pour lequel il faut restituer IF (IERR.NE.0) RETURN XMPE = -XPETIT IF (XTEMP.LT.XMPE) THEN RETURN ENDIF C + table BASE_MODALE ou ENSEMBLE_DE_BASES IF (IRET.EQ.0) THEN ENDIF IF (IERR.NE.0) RETURN c + facultative chargement et liaison c l'instant XTEMP correspond au pas de temps IPOS & 'LISTREEL',I1,X1,' ',L1,LBO) IF (IERR.NE.0) RETURN MLREEL = LBO SEGACT MLREEL c rem bp : heureusement que DYNE fonctionne a pas de temps constant ! c sinon il faudrait revoir la def de PRECI !!! IF (AR.LE.PRECI) THEN IPOS = IR ELSE ARR = ABS(1. - AR) IF (ARR.LE.PRECI) THEN IPOS = IR + 1 ELSE MOTERR(1:8) = 'TABLE ' MOTERR(9:16) ='LISTREEL' SEGDES MLREEL RETURN ENDIF ENDIF SEGDES MLREEL cbp QUEL TYPE DE SORTIE DE LA TABLE DYNE (CHPOINT OU LISTREEEL)? c existe-t-il le LISTREEL dans la table . 'DEPLACEMENT' ? MODYN=MOCLE2(IMOO) TYPRET=' ' & TYPRET,I1,X1,' ',L1,IDYN1) IF(TYPRET.EQ.'TABLE'.AND.IDYN1.NE.0) THEN ICHPT=-1*IDYN1 IF (MOOPT(IMOO).EQ.'DEPL') THEN ELSE IF (MOOPT(IMOO).EQ.'VITE') THEN ELSE IF (MOOPT(IMOO).EQ.'ACCE') THEN ELSE IF (MOOPT(IMOO).EQ.'REAC') THEN ELSE ENDIF RETURN ENDIF c Recuperation du CHPOINT a l'instant XTEMP c + Recombinaison via RCDEPL et RCCONT c (Ecriture du CHPOIN/MCHAML dans RCDEPL/RCCONT) & 'TABLE',I1,X1,' ',L1,ITDEP) IF (IERR.NE.0) RETURN IF (MOOPT(IMOO).EQ.'DEPL') THEN & 'CHPOINT',I1,X1,' ',L1,ICHPT) IF (IERR.NE.0) RETURN ELSE IF (MOOPT(IMOO).EQ.'VITE') THEN & 'CHPOINT',I1,X1,' ',L1,ICHPT) IF (IERR.NE.0) RETURN ELSE IF (MOOPT(IMOO).EQ.'ACCE') THEN & 'CHPOINT',I1,X1,' ',L1,ICHPT) IF (IERR.NE.0) RETURN ELSE IF (MOOPT(IMOO).EQ.'REAC') THEN & 'CHPOINT',I1,X1,' ',L1,ICHPT) IF (IERR.NE.0) RETURN ELSE & 'CHPOINT',I1,X1,' ',L1,ICHPT) IF (IERR.NE.0) RETURN ENDIF RETURN C---- fin du cas avec une TABLE de RESULTAT_DYNE ----------------------- *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+**+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+* * version appelee a disparaitre *+*+*+*+*+*+*+*+*+*+*+*+*+*+*+**+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+* 900 CONTINUE C---- Cas d'un CHPOINT + BASEMODA -------------------------------------- C Lecture obligatoire de la BASEMODA + un mot clé (DEPL,...) if (IRETOU.eq.0.or.IERR.NE.0) THEN WRITE(IOIMP,*) 'OPERATEUR RECO : Apres un CHPOINT,' , & ' on attend un objet de type :' WRITE(IOIMP,*) '- TABLE de sous-type BASE_MODALE,' WRITE(IOIMP,*) '- TABLE de sous-type LIAISONS_STATIQUES,' WRITE(IOIMP,*) '- ou BASEMODA' RETURN ENDIF IF (IRET3.EQ.1) THEN IMOO=0 ENDIF IF(IMOO.EQ.0) THEN WRITE(IOIMP,*) 'OPERATEUR RECO : On attend un mot-cle' RETURN ENDIF c qq initialisations + recup du chpoint KPSMO = 0 KCHAR = 0 KCHLIA = 0 ITLIA = 0 XTEMP = 0.D0 ICH1=ICHP1 c lecture du temps si PSEUDO MODE (+chargement + chpoint de liaison) IF(IERR.NE.0) RETURN IF (IRETOU.EQ.1) THEN KPSMO = 1 ENDIF IF(IERR.NE.0) RETURN C C **** ON VERIFIE QUE LE CHPOINT CONTIENT LES CONTRIBUTIONS MODALES C MCHPOI = ICH1 SEGACT MCHPOI NSOUPO = IPCHP(/1) DO 1 ISOU = 1,NSOUPO MSOUPO = IPCHP(ISOU) SEGACT MSOUPO IF (NOCOMP(/2).NE.1) THEN C ON CHERCHE UN CHPOINT QUI CONTIENT DES CONTIBUTIONS MODALES RETURN ENDIF IF (NOCOMP(1).NE.'ALFA') THEN C ON CHERCHE ........ SEGDES MSOUPO RETURN ENDIF SEGDES MSOUPO 1 CONTINUE SEGDES MCHPOI * TRAVAIL SUR LA BASE MODALE MBASEM = IP2 SEGACT MBASEM NBAS = LISBAS(/1) IP4 = 1 IF (NBAS.NE.1) THEN C BASE COMPLEXE IF( IERR.NE.0 ) RETURN MSTRUC = IRET SEGACT MSTRUC NSTRU = LISTRU(/1) MSOSTU = LISTRU(1) IP3 = 1 IF (NSTRU.NE.1) THEN C STRUCTURE COMPLEXE IF (IERR.NE.0) RETURN C ON VERIFIE QU'IL S'AGIT DE SOUS-STRUCTURES IDENTIQUES SEGACT MSOSTU ISRAI1 = ISRAID SEGDES MSOSTU DO 14 NS = 2,NSTRU MSOSTU = LISTRU(NS) SEGACT MSOSTU IF (ISRAI1.NE.ISRAID) RETURN SEGDES MSOSTU 14 CONTINUE IF (IP3.EQ.0 .OR. IP3.GT.NSTRU) THEN RETURN ENDIF MSOSTU = LISTRU(IP3) ENDIF SEGDES MSTRUC C ON VERIFIE QUE LA SOUS-STRUCTURE EST DANS LA BASE DO 16 NB = 1,NBAS MSOBAS = LISBAS(NB) SEGACT MSOBAS IP4 = NB IF (IBSTRM(1).EQ.MSOSTU) GOTO 17 SEGDES MSOBAS 16 CONTINUE C *** INCOHERENCE ENTRE LA BASE ET LA STRUCTURE RETURN 17 CONTINUE ENDIF MSOBAS = LISBAS(IP4) SEGDES MBASEM SEGACT MSOBAS IBMODE = IBSTRM(2) IBSOLS = IBSTRM(3) IBPSMO = IBSTRM(5) IRET = 0 IRET1 = 0 IRET2 = 0 * IF (IMOO.EQ.2) THEN * * RECOMBINAISON DE CONTRAINTES * READ (MOOPT(2),FMT='(A4)') MOCON IF (IBMODE.NE.0) THEN MSOLUT = IBMODE SEGACT MSOLUT KMEL1 = MSOLIS(3) KCON = MSOLIS(6) SEGDES MSOLUT IF (KCON.EQ.0) THEN MOTERR(1:8) = ITYSOL RETURN ENDIF IF( IERR.NE.0 ) RETURN IF (IBSOLS.EQ.0) IRET = IRET1 ENDIF IF (IBSOLS.NE.0) THEN MSOLUT = IBSOLS SEGACT MSOLUT KMEL1 = MSOLIS(3) KCON = MSOLIS(6) SEGDES MSOLUT IF (KCON.EQ.0) THEN MOTERR(1:8) = ITYSOL RETURN ENDIF IF( IERR.NE.0 ) RETURN IF (IRET1.NE.0) THEN ICONV=0 ELSE IRET = IRET2 ENDIF ENDIF IF (IRET.EQ.0) RETURN ITYPE = 'CHAMELEM' ELSE * * RECOMBINAISON DE DEPLACEMENTS * READ (MOOPT(1),FMT='(A4)') MODEPL IF (IBMODE.NE.0) THEN MSOLUT = IBMODE SEGACT MSOLUT KDEPL = MSOLIS(5) KMEL1 = MSOLIS(3) SEGDES MSOLUT IF (KDEPL.EQ.0) THEN MOTERR(1:8) = ITYSOL RETURN ENDIF IF (IERR.NE.0) RETURN IF (IBSOLS.EQ.0) IRET = IRET1 ENDIF IF (IBSOLS.NE.0) THEN MSOLUT = IBSOLS SEGACT MSOLUT KDEPL = MSOLIS(5) KMEL1 = MSOLIS(3) SEGDES MSOLUT IF (KDEPL.EQ.0) THEN MOTERR(1:8) = ITYSOL RETURN ENDIF IF (IERR.NE.0) RETURN IF (IRET1.NE.0) THEN IF( IERR.NE.0 ) RETURN ELSE IRET = IRET2 ENDIF ENDIF IF (IRET.EQ.0) RETURN ITYPE = 'CHPOINT ' ENDIF * * PRIS EN COMPTE DES PSEUDO-MODES * IF (KPSMO.NE.0) THEN ENDIF * SEGDES MSOBAS END
© Cast3M 2003 - Tous droits réservés.
Mentions légales