pjba
C PJBA SOURCE CB215821 20/11/25 13:35:48 10792 SUBROUTINE PJBA IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C======================================================================= C OPERATEUR PJBA : C PROJECTION D'UN CHPOINT, D'UN CHARGEMENT OU D'UNE RIGIDITE C SUR LES ELEMENTS D'UNE BASE MODALE B. C LE RESULTAT EST DU MEME TYPE. C C SYNTAXE : C * FN = PJBA B OBJET ; SI BASE ELEMENTAIRE C * FN = PJBA B STR1 (N) OBJET ; SI BASE COMPLEXE C C OBJET POUVANT ETRE UNE FORCE OU UN CHARGEMENT, C OU UNE RIGIDITE DANS LE PREMIER CAS. C C STR1 EST LA SOUS-STRUCTURE OU S'APPLIQUE L'OBJET. C N EST LE NUMERO DE LA SOUS-STRUCTURE SI CELLE-CI EST C FORMEE DE SOUS-STRUCTURES IDENTIQUES . C C C CAS PARTICULIER DES GRANDS DEPLACEMENTS SUR BASE TOURNANTE : C ---------------------------------------------------------- C C SI LA FORCE N'EST PAS LIEE A LA BASE ( EX : LA PESANTEUR ) C IL FAUT SPECIFIER LE MOT-CLEF ......... LIBR C ALORS FN EST UN OBJET LISTCHPO CONTENANT LES VECTEURS DE C DECOMPOSITION DE LA FORCE GENERALISEE F C C======================================================================= -INC SMBASEM -INC SMCHPOI -INC SMCHARG -INC SMLCHPO -INC SMSOLUT -INC SMSTRUC -INC PPARAM -INC CCOPTIO C LOGICAL L0,L1,CHAR,TABL CHARACTER*4 LIBR(1),CLE(1) CHARACTER*32 CH32 CHARACTER*72 motyp1,motyp2 DATA CLE(1)/'REEL'/ DATA LIBR(1) /'LIBR'/ NLIBR = 1 TABL = .FALSE. C---- Cas d'un LISTCHPO ou d'une TABLE de resultats -------------------- IF (IRETOU.EQ.0) THEN ENDIF IF (IRETOU.EQ.0) GOTO 100 * SIGNAL D'ENTREE ITYP=0 CALL REFUS IF (IERR.NE.0) RETURN * TABLE DE MODES IF (IERR.NE.0) RETURN * NOMBRE DE MODES IF (IRET.EQ.0) NMOD1=0 * MATRICE POUR LE PRODUIT SCALAIRE IF (IRET.EQ.0) IRIG1=0 IF (IERR.NE.0) RETURN RETURN C---- Cas d'un MODELE -------------------------------------------------- 100 CONTINUE IF (iretou.EQ.0) GOTO 200 return C---- Cas d'une RIGIDITE ----------------------------------------------- 200 CONTINUE IF (IRETOU.EQ.0) GOTO 300 C --- Cas d'une RIGIDITE suivie d'1 (ou 2) TABLE(S) --- IF (IERR.NE.0) RETURN & 'MOT',IP,RR,motyp1,.TRUE.,IQ) c lecture facultative d une 2eme table IF(IRETO2.NE.0) THEN & 'MOT',IP,RR,motyp2,.TRUE.,IQ) IF (IERR.NE.0) RETURN c a t'on inversé les 2 tables ? if (motyp1.eq.'LIAISONS_STATIQUES'.and. & motyp2.eq.'BASE_MODALE') then motyp1='BASE_MODALE' motyp2='LIAISONS_STATIQUES' MTEMP = MTAB1 MTAB1 = MTAB2 MTAB2 = MTEMP endif if (motyp1.ne.'BASE_MODALE'.or. & motyp2.ne.'LIAISONS_STATIQUES') then write(ioimp,*) 'Donnez une (des) table(s) de soustype', & ' BASE_MODALE ou LIAISONS_STATIQUES' return endif ELSE MTAB2=0 ENDIF c -calcul de Phi^T * K * Phi (ou Phi = base modale) if (motyp1.eq.'BASE_MODALE') then if (ierr.ne.0) return c -calcul de Psi^T * RELA * Psi (ou Psi = base deformees statiques) elseif (motyp1.eq.'LIAISONS_STATIQUES') then if (ierr.ne.0) return if (ierr.ne.0) return if (mrig2.gt.0.and.mrig1.gt.0) then mrig1 = mrig3 mrig2 = 0 endif if (mrig2.gt.0) mrig1 = mrig2 if (mrig1.eq.0) then return endif else write(ioimp,*) 'Donnez une table de soustype BASE_MODALE ou', & ' LIAISONS_STATIQUES' return endif RETURN c---- cas d'un CHPOINT ou d'un CHARGEMENT ------------------------------ 300 CONTINUE CHAR = IRETOU.EQ.0 IF (CHAR) THEN IF (IERR.NE.0) RETURN ENDIF IF (IRETOU.EQ.0) GOTO 400 c -lecture des modes sous forme de BASEMODA ou de table BASE_MODALE IPSTA=0 IF (IRETOU.EQ.0) THEN IF(IERR.NE.0) RETURN & 'TABLE',I1,X1,' ',L1,IP2) TABL = .TRUE. c lecture facultative d une 2eme table de liaisons statiques ELSE MBASEM=IP2 SEGACT MBASEM NBAS=LISBAS(/1) IP4=1 IF(NBAS.EQ.1) GOTO 5 * BASE COMPLEXE IF(IERR.NE.0) GOTO 4000 MSTRUC=IRET SEGACT MSTRUC NSTRU=LISTRU(/1) MSOSTU=LISTRU(1) IP3=1 IF(NSTRU.EQ.1) GOTO 2 * STRUCTURE COMPLEXE IF(IERR.NE.0) GOTO 3000 * ON VERIFIE QU'IL S'AGIT DE SOUS-STRUCTURES IDENTIQUES SEGACT MSOSTU ISRAI1=ISRAID SEGDES MSOSTU DO 1 NS=2,NSTRU MSOSTU=LISTRU(NS) SEGACT MSOSTU IF(ISRAI1.NE.ISRAID) GOTO 2000 SEGDES MSOSTU 1 CONTINUE IF(IP3.EQ.0.OR.IP3.GT.NSTRU) GOTO 4000 MSOSTU=LISTRU(IP3) 2 CONTINUE SEGDES MSTRUC * ON VERIFIE QUE LA SOUS-STRUCTURE EST DANS LA BASE DO 3 NB = 1,NBAS MSOBAS=LISBAS(NB) SEGACT MSOBAS IP4=NB IF(IBSTRM(1).EQ.MSOSTU) GOTO 4 SEGDES MSOBAS 3 CONTINUE * INCOHERENCE ENTRE LA BASE ET LA STRUCTURE GOTO 4000 4 CONTINUE SEGDES MSOBAS ENDIF c -fin du cas on a une base modale c -lecture du mot clé LIBR c -cas d'un chargement IF (CHAR) THEN MCHAR1=IPCHAR SEGINI,MCHARG=MCHAR1 NBCHG=KCHARG(/1) DO 10 NC=1,NBCHG ICHAR1=KCHARG(NC) SEGINI,ICHARG=ICHAR1 KCHARG(NC)=ICHARG IP1=ICHPO1 *+* POUR L'INSTANT, ON NE DUPLIQUE PAS LES LISTREELS IF (TABL) THEN ELSE ENDIF IF(IERR.NE.0) RETURN ICHPO1=IRET SEGDES,ICHARG 10 CONTINUE SEGDES,MCHARG c -cas d'un chpoint ELSE IF (ILIBRE .EQ. 1) THEN C CAS GRANDS DEPLACEMENTS ; CHARGEMENT LIBRE ELSE IF (TABL) THEN ELSE ENDIF IF(IRET.EQ.0) GO TO 5000 ENDIF ENDIF GOTO 5000 2000 CONTINUE SEGDES MSOSTU 3000 CONTINUE SEGDES MSTRUC SEGDES MBASEM 5000 CONTINUE RETURN c---- cas TABLE LIAISONS STATIQUES SEULE ------------------------------- 400 CONTINUE IF (IRETOU.EQ.0) GOTO 9999 c on calcule les rigidites associees if (ierr.ne.0) return if (mrig1.gt.0) then else endif RETURN c petit message d'erreur si on n'a pas lu un objet a projeter 9999 CONTINUE MOTERR(1:8)='RIGIDITE' MOTERR(9:16)='CHPOINT' MOTERR(17:24)='CHARGEME' MOTERR(25:32)='TABLE' MOTERR(33:40)='LISTCHPO' END
© Cast3M 2003 - Tous droits réservés.
Mentions légales