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