basemd
C BASEMD SOURCE PV 20/03/24 21:15:28 10554 SUBROUTINE BASEMD IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C ================================================================== C C C C CREATION D UNE BASE MODALE C C SYNTAXE : B = BASE S L M U V ; C C B : OBJET DE TYPE BASE MODALE C C S : OBJET DE TYPE STRUCTURE C C L : OBJET DE TYPE MATTAC C C M : OBJET DE TYPE SOLUTION (SOUS TYPE : MODES) C C U : OBJET DE TYPE SOLUTION (SOUS TYPE : SOLUTIONS STATIQUES) C C V : OBJET DE TYPE SOLUTION (SOUS TYPE : PSEUMODE) C C C C ECRIT PAR FARVACQUE. C C APPELLE LES SUBROUTINES SUIVANTS: C C LIRE,ECRIRE,SOLS1,ERREUR(61,130,131,133,134,135,173,226,227) C ================================================================== C -INC SMSOLUT -INC SMBASEM -INC SMSTRUC -INC SMATTAC -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC CCREEL -INC SMCOORD -INC SMELEME SEGMENT ITRAV(NJONC) SEGMENT ITRABB(0) * PARAMETER ( LNOM1 = 2 ) CHARACTER*4 NOMOP1(LNOM1) CHARACTER*8 CTYP DATA NOMOP1/'PLUS','ROTA'/ * * Nouvelle version avec les TABLEs * IF(IERR.NE.0) RETURN IF (CTYP(1:8).EQ.'TABLE ') THEN IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN IPO1 = 0 IPO2 = 0 XANG = XZERO IF(IERR.NE.0) RETURN IF (IMOT1.EQ.2) THEN IF (IDIM.EQ.3) THEN IF(IERR.NE.0) RETURN ENDIF IF(IERR.NE.0) RETURN ENDIF IF (IMOT1.EQ.0) THEN RETURN ELSE RETURN ENDIF ENDIF C NIBST=5 C C **** LECTURE DE LA STRUCTURE C IF(IERR.NE.0) GO TO 5000 MSTRUC=ISTRU0 SEGACT MSTRUC NSTRU=LISTRU(/1) IF(NSTRU.NE.1) THEN C ON VERIFIE QUE LA STRUCTURE EST IDENTIQUE MSOSTU=LISTRU(1) SEGACT MSOSTU I1=ISRAID I2=ISMASS I3=ITYSOU SEGDES MSOSTU DO 5 I=2,NSTRU MSOSTU=LISTRU(I) SEGACT MSOSTU IF(ISRAID.NE.I1) GOTO 6 IF(ITYSOU.NE.I3) GOTO 6 SEGDES MSOSTU GOTO 5 6 CONTINUE SEGDES MSOSTU C LES SOUS STRUCTURES NE SONT PAS IDENTIQUES GOTO 5000 5 CONTINUE ENDIF SEGDES MSTRUC C C **** LECTURE DU MATTAC C MATTAC=IRET IF(IRETOU.EQ.0) MATTAC=0 C C **** LECTURE DES OBJETS SOLUTION C IMODE=0 ISOLS=0 IPSMO = 0 IF(IRETOU.EQ.0) GO TO 53 MSOLUT=IRET SEGACT MSOLUT C C **** EST CE UN MODE ? C IF(ITYSOL.NE.'MODE ') GO TO 51 IF(IMODE.EQ.0) GO TO 52 MOTERR(1:8)='SOLUTION' MOTERR(9:15)='MODE' C MODES DEJA DONNES SEGDES MSOLUT GO TO 5000 52 CONTINUE IMODE=MSOLUT SEGACT MSOLUT MSOLEN=MSOLIS(5) SEGDES MSOLUT IF(MSOLEN.NE.0) GO TO 304 MOTERR(1:8)='MODE' GOTO 5000 304 CONTINUE IF(ISOLS.EQ.0) GO TO 1 GO TO 53 51 CONTINUE C C **** EST CE UN SOLSTA ? C IF(ITYSOL.NE.'SOLUSTAT') GO TO 54 IF(ISOLS.EQ.0) GO TO 55 MOTERR(1:8)='SOLUTION' MOTERR(9:16)='SOLUSTAT' C SOLUTIONS STATIQUES DEJA DONNEES SEGDES MSOLUT GO TO 5000 55 CONTINUE ISOLS=MSOLUT SEGDES MSOLUT IF(IMODE.EQ.0) GO TO 1 GO TO 53 C C **** EST CE UN PSEUMOD? C 54 CONTINUE IF(ITYSOL.NE.'PSEUMODE') GO TO 954 IF(IPSMO.EQ.0) GO TO 955 MOTERR(1:8)='SOLUTION' MOTERR(9:16)='PSEUMODE' C SOLUTIONS STATIQUES DEJA DONNEES SEGDES MSOLUT GO TO 5000 955 CONTINUE IPSMO=MSOLUT SEGDES MSOLUT IF(IMODE.EQ.0) GO TO 1 GO TO 53 954 CONTINUE MOTERR(1:8)='SOLUTION' MOTERR(9:16)=ITYSOL C ON N ATTEND PAS CE SOUSTYPE DE SOLUTION SEGDES MSOLUT GO TO 5000 C C **** VERIFICATIONS DIVERSES C 53 CONTINUE IF(IMODE.NE.0 . OR . MATTAC.NE.0) GO TO 60 C NI MODE NI LIAISON DANS CETTE BASE MODALE GO TO 5000 60 CONTINUE C SEGACT MSTRUC C BOUCLE SUR LES SOUS-BASES SEGINI ITRABB DO 66 IBAS=1,NSTRU SEGINI MSOBAS ITRABB(**)=MSOBAS IBSTRM(1)=LISTRU(IBAS) IBSTRM(2)=0 IBSTRM(3)=0 IBSTRM(4)=MATTAC IBSTRM(5)=IPSMO IF(IBAS.EQ.1) THEN IBSTRM(2)=IMODE ELSE IF(IMODE.NE.0) THEN C C **** DANS LE CAS IDEN, DUPLICATION DES MODES C SEGACT MCOORD*mod MSOLUT=IMODE SEGACT MSOLUT MELEME=MSOLIS(3) SEGACT MELEME NBELEM=NUM(/2) NBREF=0 NBNN=1 NBSOUS=0 SEGINI IPT1 ITYPEL=1 MSOSTU=LISTRU(IBAS) IPOIN=nbpts NBPTS=IPOIN+NBELEM SEGADJ MCOORD DO 403 I=1,NBELEM XCOOR(IPOIN*(IDIM+1)+1)=0. XCOOR(IPOIN*(IDIM+1)+2)=0. IF(IDIM.EQ.3) XCOOR(IPOIN*(IDIM+1)+3)=0. XCOOR(IPOIN*(IDIM+1)+(IDIM+1))=0. IPOIN=IPOIN+1 IPT1.NUM(1,I)=IPOIN 403 CONTINUE NIPO=MSOLIS(/1) SEGINI MSO1 MSO1.ITYSOL=ITYSOL DO 404 I=1,NIPO MSO1.MSOLIS(I)=MSOLIS(I) MSO1.MSOLIT(I)=MSOLIT(I) 404 CONTINUE MSO1.MSOLIS(3)=IPT1 SEGDES MSO1,MSOLUT,MELEME,IPT1 IBSTRM(2)=MSO1 ENDIF C C **** BOUCLE SUR LES LIAISONS : ON CHERCHE LES LIAISONS QUI AGISSENT C **** SUR MSOSTU. MECA, FLUIDE ET DEPI :MJONCT MIS DANS MSOLE1 C **** AUTRES :RIEN C IF(MATTAC.EQ.0) GO TO 61 N=0 SEGACT MATTAC MSOSTU=LISTRU(IBAS) NSOUMA=LISATT(/1) DO 70 IA=1,NSOUMA MSOUMA=LISATT(IA) SEGACT MSOUMA NL=IATREL(/1) DO 72 IB=1,NL MJONCT=IATREL(IB) SEGACT MJONCT NC=ISTRJO(/1) DO 73 IC=1,NC IF(ISTRJO(IC).NE.MSOSTU) GO TO 73 IF(ITYATT.NE.'MECA'.AND.ITYATT.NE.'FLUI'.AND.ITYATT.NE.'DEPI') & GOTO 73 N=N+1 IF(N.EQ.1)SEGINI MSOLE1 IF(N.NE.1)SEGADJ MSOLE1 MSOLE1.ISOLEN(N)=MJONCT C WRITE(6,4446)MJONCT C4446 FORMAT(' ********MJONCT=',I6) 73 CONTINUE SEGDES MJONCT 72 CONTINUE SEGDES MSOUMA 70 CONTINUE NJONC=N C IF(ISOLS.NE.0) THEN C C **** COMPATIBILITE ENTRE LES MJONCT ET LES SOLUTIONS STATIQUES? C IF(NJONC.EQ.0) GOTO 900 C INCOMPATIBILITE ENTRE LES SOLSTA ET LES LIAISONS MSOLUT=ISOLS SEGACT MSOLUT MSOLEN=MSOLIS(10) SEGACT MSOLEN LTAB=ISOLEN(/1) IF(LTAB.LT.NJONC) THEN C INCOMPATIBILITE ENTRE LES SOLSTA ET LES LIAISONS SEGDES MSOLEN,MSOLUT GO TO 900 ENDIF IF(NJONC.LT.LTAB) SEGINI ITRAV DO 81 J=1,NJONC MJONCT=MSOLE1.ISOLEN(J) DO 80 I=1,LTAB IF(MJONCT.NE.ISOLEN(I)) GO TO 80 IF(NJONC.LT.LTAB) ITRAV(J)=I GOTO 81 80 CONTINUE C INCOMPATIBILITE ENTRE LES SOLSTA ET LES LIAISONS SEGDES MSOLEN,MSOLUT IF(NJONC.LT.LTAB) SEGSUP ITRAV GO TO 900 81 CONTINUE SEGDES MSOLEN,MSOLUT IF(NJONC.LT.LTAB) THEN C C CREATION DE L'OBJET SOLUTION STATIQUE REDUIT AUX LIAISONS DU MATTAC C MSO1=ISOLS SEGACT MSO1 MSOLE2=MSO1.MSOLIS(5) SEGACT MSOLE2 N=NJONC SEGINI MSOLEN NBELEM=NJONC NBNN=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=1 DO 82 IB=1,NJONC MJONCT=MSOLE1.ISOLEN(IB) SEGACT MJONCT IPT1=MJOPOI SEGACT IPT1 NUM(1,IB)=IPT1.NUM(1,ITRAV(IB)) ISOLEN(IB)=MSOLE2.ISOLEN(ITRAV(IB)) SEGDES IPT1,MJONCT 82 CONTINUE SEGDES MELEME,MSOLE2,MSOLEN,MSOLE1 SEGSUP ITRAV NIPO=10 SEGINI MSOLUT ITYSOL='SOLUSTAT' DO 83 I=1,NIPO MSOLIS(I)=0 MSOLIT(I)=0 83 CONTINUE MSOLIS(3)=MELEME MSOLIS(5)=MSOLEN MSOLIT(5)=2 MSOLIT(10)=14 MSOLIS(10)=MSOLE1 SEGDES MSOLUT IBSTRM(3)=MSOLUT ELSE IBSTRM(3)=ISOLS SEGSUP MSOLE1 ENDIF ELSE C C *** IL N'Y A PAS DE SOLUTION STATIQUES. S'IL EN FAUT ON VA LES C *** CALCULER EN APPELANT LE SOUS-PROGRAMME SOLS1 DE L'OPERATEUR SOLS C IF(NJONC.NE.0) THEN KSOSTU=MSOSTU KSOLE1=MSOLE1 IF(IERR.NE.0) THEN SEGSUP MSOLE1 GOTO 900 ENDIF IBSTRM(3)=KSOLUT ENDIF ENDIF C C **** SI IL Y A D'AUTRES TYPES DE LIAISONS, ON CREE DES MODES ET DES C **** SOLUTIONS STATIQUES REDUITS AUX POINTS DE CES DERNIERES LIAISONS C IF(IMODE.EQ.0) THEN C *** OUBLI DES MODES ENDIF GOTO 62 C 900 CONTINUE MOTERR(1:8)='SOLUSTAT' MOTERR(9:15)='ATTACHE' 62 CONTINUE SEGDES MATTAC 61 CONTINUE SEGDES MSOBAS 66 CONTINUE SEGDES MSTRUC N=ITRABB(/1) IF(N.NE.0) THEN SEGINI MBASEM DO 800 NN=1,N LISBAS(NN)=ITRABB(NN) 800 CONTINUE SEGDES MBASEM ENDIF SEGSUP ITRABB 5000 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales