evreco
C EVRECO SOURCE BP208322 22/09/09 21:15:04 11448 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C======================================================================= C OPTION RECO DE L'OPERATEUR EVOL C C.1.EVOLUTION D'UN DDL DANS L'OBJET SOLUTION: C MEVOL = EVOL COUL RECO MSOLUT BASE TYPE PT1 COMP (INSTANTS) ; C ---- ---- ---- ---- C C.2.EVOLUTION DE PLUSIEURS DDL DANS L'OBJET SOLUTION: C MEVOL = EVOL COUL RECO MSOLUT BASE TYPE CHP1 (INSTANTS) ; C C.3.EVOLUTION DE PLUSIEURS DDL DANS L'OBJET TABLE C MEVOL = EVOL COUL RECO TRESU TBASE TYPE PT1 COMP (INSTANTS) ; C ---- ---- ---- ---- C C COUL : COULEUR DE LA (OU DES) COURBE(S) C MEVOL : OBJET DE TYPE EVOLUTION C MSOLUT : OBJET SOLUTION C TYPE : MOT CLE:TYPE DE LA VARIABLE (DEPL,VITE,ACCE,CONT..) C COMP : NOM DE LA COMPOSANTE CHOISIE C INSTANTS: PROCEDURE FACULTATIVE POUR CHOISIR LES CAS DE SORTIE C PROGX :OBJET LISTREEL, LISTE DES TEMPS A SORTIR C LECTC :OBJET LISTENTI, LISTE DES CAS A SORTIR C RIEN :L'OBJET EVOLUTION PORTE SUR TOUS LES CAS PRESENTS C DANS LE MSOLUT C C BASE : BASE ELEMENTAIRE C BASE STRU N C C PT1 : POINT OU MELEME A EXTRAIRE C CHP1 : CHPOINT CONTENANT LES POINTS ET DDL (FABRIQUE PAR C EXEMPLE PAR MANU CHPO ) C C LES OBJETS PT1,CHP1 SERVENT A REPERER DANS LES CHAMPS C CHOISIS, LE(S) POINT(S) QUI INTERESSENT L'EVOLUTION. C C CREATION : 16/10/85, FARVACQUE C C======================================================================= -INC PPARAM -INC CCOPTIO -INC SMSOLUT -INC SMTABLE -INC SMBASEM -INC SMEVOLL -INC SMELEME -INC SMLENTI -INC SMLREEL -INC SMLMOTS -INC SMCHPOI LOGICAL L0,L1 SEGMENT NUMOO CHARACTER*(LOCHPO) NUDDL(N) ENDSEGMENT CHARACTER*4 TI1,CHA4 CHARACTER*8 ITYPE,ITYP1,CTYP,TYPRET,CHARRE CHARACTER*72 TI,MCHA,NOMCO,MTIT1 PARAMETER(NCLE=5) CHARACTER*4 MOTIT1(1),MOCLE(NCLE) CHARACTER*12 MOCLE2(NCLE),MODYN DATA MOTIT1/'LEGE'/ DATA MOCLE/'DEPL','VITE','ACCE','CONT','REAC'/ DATA MOCLE2/'DEPLACEMENT','VITESSE','ACCELERATION', & 'DEPLACEMENT','DEPLACEMENT'/ POINTEUR LCOUL.MLENTI C C LECTURE OPTIONNELLE DU TITRE DE LA SOUS EVOLUTION DE LA COURBE (LEGE) : MTIT1=' ' ITIT1=0 IF(ITIT1.EQ.1) THEN IF(IERR.NE.0) RETURN ENDIF C======================================================================= ICONT=0 KPSMO=0 ISOLU=0 ITABL=0 * *---- type du prochain objet a lire ( TABLE ou SOLUTION ) * IF (IERR.NE.0) RETURN c----------------------------------------------------------------------- c SYNTAXE AVEC LISTCHPO c----------------------------------------------------------------------- IF (CTYP.EQ.'LISTCHPO') THEN * * LISTCHPO DES COEFFICIENTS DE PROJECTION * ======================================= IF (IERR.NE.0) RETURN * * LISTE DES INSTANTS * ================== IF (IERR.NE.0) RETURN * * TABLE DE MODES * ============== IF (IERR.NE.0) RETURN * * NOMBRE DE MODES * =============== IF (IRET.EQ.0) NMOD1=0 * * LISTE DES COMPOSANTES * ===================== ILMOT1=0 IF (IRET.EQ.0) THEN IF (IRETOU.GT.0) THEN JGN=4 JGM=1 SEGINI,MLMOTS ILMOT1=MLMOTS ENDIF ENDIF * * GEOMETRIE * ========= IF (IRET.NE.0) THEN NBNN=1 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI,MELEME ITYPEL=1 NUM(1,1)=IPO1 IMA1=MELEME ELSE ENDIF * * CALCUL DE LA RECOMBINAISON MODALE * ================================= IF (IERR.NE.0) RETURN * * CREATION DE L'OBJET EVOLUTION * ============================= IF (IERR.NE.0) RETURN * RETURN ENDIF c----------------------------------------------------------------------- c SYNTAXE AVEC TABLE ou SOLUTION c----------------------------------------------------------------------- SEGACT,LCOUL ICOUL=LCOUL.LECT(1) SEGDES,LCOUL * * --- on lit le type du champ a traiter et le nom de la composante cbp -deb- c CALL LIRCHA(MCHA,1,IRETOU) IF(IERR.NE.0) RETURN MCHA=' ' MCHA(1:4)=MOCLE(ICLE) LCHALU=4 MODYN=MOCLE2(ICLE) cbp -fin- IF (MCHA.EQ.'CONT') ICONT = 1 IF (MCHA.EQ.'REAC') ICONT = 2 cbp LCHALU=IRETOU IF(IRETOU.EQ.0) NOMCO=' ' * * --- on recupere le point ou le maillage ou le chpoint IF (IRETOU.EQ.0) THEN IF (IRETOU.EQ.0) THEN IF (IRETOU.EQ.0) THEN * on ne trouve pas le support qui contient les points RETURN ELSE ITYPE='CHPOINT' ENDIF ELSE ITYPE='MAILLAGE' ENDIF ELSE ITYPE='POINT' ENDIF iptu = iret *-------------------------------------------- *---cas d'un objet de type TABLE ------------ *-------------------------------------------- *------ sous cas d'une table PASAPAS -------- if (iretou.gt.0) then if (ierr.ne.0) return if (ierr.ne.0) return IF(IERR .NE. 0) RETURN &itype,iptu,ipevo) if (ierr.ne.0) return if (ipevo.gt.0) then endif return endif *------ sous cas d'une table DYNE -------- IF (CTYP(1:5).EQ.'TABLE') THEN ITABL = 1 IF (IERR.NE.0) RETURN IF (IRETOU.EQ.0) THEN IF (IERR.NE.0) RETURN IT = 0 56 CONTINUE IT = IT + 1 TYPRET = ' ' & TYPRET,I1,X1,CHARRE,L1,ISBM) IF (ISBM.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN & 'TABLE',I1,X1,' ',L1,ISTB) & 'MAILLAGE',I1,X1,' ',L1,IMAIL) c => avec un ENSEMBLE_DE_BASES seule la syntaxe avec 1 point IF (IRE12.EQ.0) GOTO 56 TYPRET = ' ' & TYPRET,I1,X1,CHARRE,L1,ITPS) IF (ITPS.NE.0 .AND. TYPRET.EQ.'TABLE ') KPSMO = 1 ELSE RETURN ENDIF ELSE & 'TABLE',I1,X1,' ',L1,ISTB) TYPRET = ' ' & TYPRET,I1,X1,CHARRE,L1,ITPS) IF (ITPS.NE.0 .AND. TYPRET.EQ.'TABLE ') KPSMO = 1 ENDIF ENDIF *-------------------------------------------- *---cas d'un objet de type SOLUTION --------- *-------------------------------------------- IF (CTYP(1:8).EQ.'SOLUTION') THEN IF(IERR.NE.0) RETURN ISOLU = 1 MSOLUT=KSOLU C lecture de la base elementaire MSOBAS=IBOBAS C MBASEM=IBOSEM IF(IERR.NE.0) RETURN ENDIF *---------------------------------------------------------- *------- fin des cas TABLE/SOLUTION * et sous cas TABLE PASAPAS / TABLE DYNE --------- *---------------------------------------------------------- C---- lecture du chargement pour les pseudo-modes KCHAR = 0 C---- lecture des instants IPX=0 ITOUS=0 ILX=0 IF(IRETOU.EQ.0) ITOUS=1 C---------------------------------------------------- c remplissage des tableaux de NUMOO C---------------------------------------------------- c sortie : NUMOO.NUMO(i) = numero de noeud du i^eme ddl a traiter c NUMOO.NUDDL(i)= composante du i^eme ddl a traiter NUMOO=IBOO IF(IERR.NE.0) RETURN *-------------------------------------------- *---cas d'un objet de type SOLUTION --------- *-------------------------------------------- IF (ISOLU.EQ.1) THEN SEGACT MSOLUT IF (MCHA.EQ.'CONT') MCHA = 'DEPL' MOTERR(1:8)=ITYSOL IF(ICHA.EQ.0) THEN * erreur dans le type du champ MOTERR(1:8)='SOLUTION' MOTERR(9:26)=ITYSOL MOTERR(30:38)=MCHA RETURN ENDIF MSOLEN=MSOLIS(ICHA) IF(MSOLEN.EQ.0) THEN * ce type de champ est vide dans le MSOLUT MOTERR(1:8)='SOLUTION' MOTERR(9:26)=ITYSOL MOTERR(30:38)=MCHA RETURN ENDIF IF (ITYSOL.NE.'DYNAMIQU') THEN * option non disponible MOTERR(1:8)='SOLUTION' MOTERR(9:16)=ITYSOL RETURN ENDIF IF (MSOLIT(ICHA).NE.2) THEN * la sortie porte sur des CHAMELEM * option non disponible RETURN ENDIF IBOS=MSOLUT * verification des instants de sortie * dans IPX le LISTREEL a mettre dans IPROGX * dans ILEX le LISTENTI qui contient les numeros des champs IF(IERR.NE.0) RETURN MSOLUT=IBOS * IBOBAS=MSOBAS IBOO=NUMOO IF(IERR.NE.0) RETURN MSOBAS=IBOBAS NUMOO=IBOO MLENTI=ILEX SEGSUP MLENTI * * prise en compte des pseudo-modes * SEGACT MSOBAS IMODE = IBSTRM(2) ILIAI = IBSTRM(4) KPSMO = IBSTRM(5) SEGDES MSOBAS IF (KPSMO.NE.0) THEN IF (ILIAI.NE.0) THEN MSOLUT = KSOLU SEGACT MSOLUT MOTERR(1:8) = ITYSOL MCHA = 'LIAI' IF (ICHA.EQ.0) THEN MOTERR(1:8)='SOLUTION' MOTERR(9:26)=ITYSOL MOTERR(30:38)=MCHA RETURN ENDIF MSOLEN = MSOLIS(ICHA) IF (MSOLEN.EQ.0) THEN MOTERR(1:8)='SOLUTION' MOTERR(9:26)=ITYSOL MOTERR(30:38)=MCHA RETURN ENDIF SEGDES MSOLUT ITOU2 = 0 IBOS = KSOLU IF (IERR.NE.0) RETURN ELSE ILEX2 = 0 ENDIF IBOO = NUMOO NUMOO = IBOO ENDIF ENDIF *------------------------------------------------- *---cas d'un objet de type TABLE DYNE ------------ *------------------------------------------------- IF (ITABL.EQ.1) THEN cbp QUEL TYPE DE SORTIE DE LA TABLE DYNE (CHPOINT OU LISTREEEL)? * ------ sous cas d'un LISTREEL * dans la table . 'DEPLACEMENT' . ptalfa -------- c existe-t-il le LISTREEL dans la table . 'DEPLACEMENT' ? TYPRET=' ' & TYPRET,I1,X1,' ',L1,IDYN1) IF(TYPRET.EQ.'TABLE'.AND.IDYN1.NE.0) THEN * sortie : ILEN1 = liste des deformees modales [phi_j] * ILEN2 = liste des points reperes IF(IERR.NE.0) RETURN c ILEN3 =liste des LISTREEL des alpha_j(t) MLENT2=ILEN2 SEGACT,MLENT2 JG=MLENT2.LECT(/1) SEGINI,MLENT3 ILEN3=MLENT3 DO I=1,JG IPREP2=MLENT2.LECT(I) & 'LISTREEL',I1,X1,' ',L1,IRET1) MLENT3.LECT(I)=IRET1 ENDDO claisse actif SEGDES,MLENT2,MLENT3 c creation d'une listenti des indices a sortir pour l'evolution * Travail effectif (= Recombinaison modale) * sortie : NUMOO.KLIST(k) = pointeur vers le k^ieme listreel resultat IBOO=NUMOO SEGDES,MLENT2,MLENT3 GOTO 2001 ENDIF * ------ sous cas de CHPOINTS dans la table . I . 'DEPL' -------- ICHA =0 * on prend l'indice 1 de la table (IRET1 = table du pas 1) & 'TABLE',I1,X1,' ',L1,IRET1) c recherche de l'indice MCHA dans la table du pas 1 IF (ICONT.EQ.1) MCHA = 'DEPL' IF (ICONT.EQ.2) MCHA = 'DEPL' IBOBO=IRET1 IF (ICHA.EQ.0) THEN * erreur dans le type du champ : cbp MOTERR(1:8)= MCHA(1:8) MOTERR(1:8)='TABLE ' MOTERR(9:26)='RESULTAT_DYNE ' MOTERR(30:38)=MCHA c Dans l'objet solution de type DEPL on ne trouve pas la liste des DEPL RETURN ENDIF * verification des instants de sortie * entree : IPX = LISTREEL des instants (a mettre dans IPROGX) * ITOUS = 1 si IPX non fourni (on recherche alors tous * les instants), =0 sinon * sortie : ILEX = LISTENTI des pointeurs vers les champs * aux temps souhaites { alpha(t_1) ... } IF (IERR.NE.0) RETURN * * sortie : ILEN1 = liste des deformees modales [phi_j] * ILEN2 = liste des points reperes IF(IERR.NE.0) RETURN * * Travail effectif (= Recombinaison modale) * sortie : NUMOO.KLIST(k) = pointeur vers le k^ieme listreel resultat IBOO=NUMOO IF(IERR.NE.0) RETURN NUMOO=IBOO * ------ partie commune aux 2 sous cas -------- 2001 CONTINUE * * prise en compte de la rotation des corps rigides * IF (MCHA(1:4).EQ.'DEPL') THEN * On regarde si on a une base de corps rigide IF (IROT.NE.0) THEN IBOO = NUMOO * Recombinaison des deplacements NUMOO = IBOO ENDIF ELSE IF (MCHA(1:4).EQ.'VITE') THEN * On regarde si on a une base de corps rigide IF (IROT.NE.0) THEN * On recupere les angles de rotation IF (ICHARO.EQ.0) THEN c MOTERR(1:8)=MCHA(1:8) c MOTERR(9:12)=MCHA MOTERR(1:8)='TABLE ' MOTERR(9:26)='RESULTAT_DYNE ' MOTERR(30:38)=MCHA RETURN ENDIF IBOO = NUMOO * On recombine les vitesses NUMOO = IBOO ENDIF ELSE IF (MCHA(1:4).EQ.'ACCE') THEN * On regarde si on a une base de corps rigide IF (IROT.NE.0) THEN * On recupere les angles de rotation IF (ICHARO.EQ.0) THEN c MOTERR(1:8)=MCHA(1:8) c MOTERR(9:12)=MCHA MOTERR(1:8)='TABLE ' MOTERR(9:26)='RESULTAT_DYNE ' MOTERR(30:38)=MCHA RETURN ENDIF * On recupere les vitesses de rotation IF (ICHAVI.EQ.0) THEN c MOTERR(1:8)=MCHA(1:8) c MOTERR(9:12)=MCHA MOTERR(1:8)='TABLE ' MOTERR(9:26)='RESULTAT_DYNE ' MOTERR(30:38)=MCHA RETURN ENDIF IBOO = NUMOO * On recombine les accelerations &ILEXVI,IDEFO) NUMOO = IBOO ENDIF ENDIF ENDIF ENDIF MLENTI=ILEN1 SEGSUP MLENTI MLENTI=ILEN2 SEGSUP MLENTI MLENTI=ILEX SEGSUP MLENTI * * prise en compte des pseudo-modes * IF (KPSMO.EQ.1) THEN IF (KCHAR.NE.0) THEN IBOO = NUMOO NUMOO = IBOO ELSE ENDIF ENDIF ENDIF *-------------------------------------------- * initialisation du MEVOLL resultat *-------------------------------------------- * IF (ICONT.EQ.1) MCHA='CONT' IF (ICONT.EQ.2) MCHA='REAC' SEGINI MEVOLL ITYEVO='REEL' TI(1:72)=TITREE IEVTEX=TI DO 2080 I=1,N SEGINI KEVOLL TYPX='LISTREEL' TYPY='LISTREEL' IPROGX=IPX IPROGY=KLIST(I) NOMEVX=ITYP1 NOMEVY(1:4)=MCHA NOMEVY(9:12)=NUDDL(I) c KEVTEX=TI IF(ITIT1.EQ.0) MTIT1(1:12)=NOMEVY(1:12) KEVTEX=MTIT1 NUMEVY='REEL' NUMEVX=ICOUL SEGDES KEVOLL IEVOLL(I)=KEVOLL 2080 CONTINUE SEGDES MEVOLL SEGSUP NUMOO * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales