tbobj
C TBOBJ SOURCE PV 20/12/19 22:54:43 10826 C OBJLIR SOURCE ENSAM 94/08/09 SUBROUTINE TBOBJ C INITIALISATION ET REMPLISSAGE D'UN TABLEAU A PARTIR D'UN OBJET C EV EVOLUTION C CE CHAMP PAR ELEMENT C CH CHAMP PAR POINT * * DEFINITION DES VARIABLES * IMPLICIT INTEGER(I-N) -INC TMNTAB -INC SMEVOLL -INC SMLREEL -INC SMLENTI -INC SMLMOTS -INC SMTABLE -INC SMCHPOI -INC SMELEME -INC PPARAM -INC SMCHAML POINTEUR EV.MEVOLL POINTEUR PTB.MLENTI POINTEUR CH.MCHPOI POINTEUR CE.MCHELM REAL*8 EPSILN LOGICAL ZD,ZH INTEGER ITABX,ITABY,NBPX,NBPY POINTEUR LR.MLREEL,LRX.MLREEL,LRY.MLREEL POINTEUR LIX.MLENTI,LIY.MLENTI POINTEUR LMY.MLMOTS POINTEUR KEV.KEVOLL INTEGER NBEVOL INTEGER JG,IE,IEV,IEL,IX,IY REAL*8 RA,RB LOGICAL ZN INTEGER PAGESX,PAGESY POINTEUR TB.MTABLE REAL*8 XVALRE INTEGER IVALRE INTEGER NBNOEU,NBELEM LOGICAL ZEGALE *************************************************** * * LECTURE D'UN OBJET EVOLUTION * *************************************************** ENTRY EVLIRE ( EV, TABTR, EPSILN, ITABX, ITABY) *************************************************** ** INITIALISATION DES VARIABLE *************************************************** IF (TABTR.NE.0) SEGSUP TABTR NBEVOL = 0 *************************************************** ** ANALYSE DE L'EVOLUTION: DIM DU TABLEAU *************************************************** * SI PAS D'EVOLUTION SORTIR IF (EV.EQ.0) RETURN * RECHERCHE LES EV AVEC DU NEMERIQUE EN ABSCISSE SEGACT EV ITABX=1 DO 3400 IEV=1 , EV.IEVOLL (/1) NBEVOL = NBEVOL + 1 KEV = EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPX (1:8).EQ.'LISTREEL') ITABX = ITABX+1 IF (KEV.TYPX (1:8).EQ.'LISTENTI') ITABX = ITABX+1 SEGDES KEV 3400 CONTINUE IF (ITABX.EQ.1) THEN SEGDES EV RETURN ENDIF * ON CHERCHE LA PREMIERE DO 3401 IEV=1 , EV.IEVOLL (/1) KEV = EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPX (1:8).EQ.'LISTREEL') GOTO 3402 IF (KEV.TYPX (1:8).EQ.'LISTENTI') GOTO 3402 SEGDES KEV 3401 CONTINUE * ON COMMENCE L'INITIALISATION DE LA COLONNE ABCSISSE 3402 CONTINUE IF (KEV.TYPX (1:8).EQ.'LISTREEL') THEN LRX=KEV.IPROGX SEGACT LRX SEGINI LR DO 3101 IE=1 , JG 3101 CONTINUE SEGDES LRX ELSEIF (KEV.TYPX (1:8).EQ.'LISTENTI') THEN LIX=KEV.IPROGX SEGACT LIX JG=LIX.LECT (/1) SEGINI LR DO 3102 IE=1 , JG 3102 CONTINUE SEGDES LIX ENDIF SEGDES KEV * SI PLUS D'UNE VALEUR ON INITIALISE EPSILN IF (EPSILN.EQ.0.D0 ) THEN DO 3004 IEV=1 , EV.IEVOLL (/1) KEV = EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPX (1:8).EQ.'LISTREEL') THEN LRX = KEV.IPROGX SEGACT LRX IF (IX.EQ.IY) GOTO 3003 EPSILN = MIN (EPSILN,RA) 3002 CONTINUE 3003 CONTINUE SEGDES LRX ENDIF SEGDES KEV 3004 CONTINUE EPSILN = EPSILN/3.0 ENDIF ENDIF * SI PLUS D'UNE EV ON CONTINUE A REMPLIR LR IF (NBEVOL.GT.1) THEN DO 3107 IEV=2 , NBEVOL KEV = EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPX (1:8).EQ.'LISTREEL') THEN LRX = KEV.IPROGX SEGACT LRX ZN = .TRUE. DO 3103 IET=1 , JG 3103 CONTINUE IF (ZN) THEN JG = JG + 1 SEGADJ LR ENDIF 3105 CONTINUE SEGDES LRX ENDIF IF (KEV.TYPX (1:8).EQ.'LISTENTI') THEN LIX = KEV.IPROGX SEGACT LIX DO 3115 IEL=1 , LIX.LECT (/1) RA = DBLE (LIX.LECT (IEL)) ZN = .TRUE. DO 3113 IET=1 , JG 3113 CONTINUE IF (ZN) THEN JG = JG + 1 SEGADJ LR ENDIF 3115 CONTINUE SEGDES LIX ENDIF SEGDES KEV 3107 CONTINUE ENDIF ITABY = JG + 1 *************************************************** * ** INITIALISATION DE LA STRUCTURE TABLEAU *************************************************** 3200 CONTINUE * * CALCUL DU NOMBRE DE PAGES MAXI * PAGESX = (ITABX-2) / 4 + 1 PAGESY = (ITABY-2) / 20 + 2 ** write(6,*) 'pagesx pagesy itabx itaby',pagesx,pagesy,itabx,itaby * * INITIALISE L'OJET TABTR * SEGINI TABTR * * RECHERCHE LES TITRES: GENERAL, COL, LIG, ETC * TABTR.TITGEN=EV.IEVTEX IX = 1 DO 3207 IEV=1 , NBEVOL KEV=EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPX (1:8).EQ.'LISTREEL') THEN TABTR.ELEM (IX+1,1) = KEV.KEVTEX TABTR.TITCOL (IX+1) = KEV.KEVTEX IX = IX + 1 ENDIF IF (KEV.TYPX (1:8).EQ.'LISTENTI') THEN TABTR.ELEM (IX+1,1) = KEV.KEVTEX TABTR.TITCOL (IX+1) = KEV.KEVTEX IX = IX + 1 ENDIF SEGDES KEV 3207 CONTINUE *************************************************** * REMPLIT LE TABLEAU EN CONVERTISSANT TOUT EN CHAINES *************************************************** TABTR.YTYPE (1) = 'LISTREEL' DO 3430 IY=2 , ITABY 3430 CONTINUE IF( NBEVOL.EQ.1) THEN IEV=1 KEV=EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPY (1:8).EQ.'LISTREEL') THEN LRY=KEV.IPROGY SEGACT LRY TABTR.YTYPE (IEV+1) = 'LISTREEL' 33081 CONTINUE SEGDES LRY ELSEIF (KEV.TYPY (1:8).EQ.'LISTENTI') THEN TABTR.YTYPE (IEV+1) = 'LISTENTI' LIY=KEV.IPROGY SEGACT LIY DO 33082 IEL=1 , LIY.LECT(/1) TABTR.ELEM (IEV+1,IEL+1) = F_ITOA (LIY.LECT (IEL)) 33082 CONTINUE SEGDES LIY ELSEIF (KEV.TYPY (1:8).EQ.'LISTMOTS') THEN LMY=KEV.IPROGY SEGACT LMY TABTR.YTYPE (IEV+1) = 'LISTMOTS' 33083 CONTINUE SEGDES LMY ENDIF ELSE DO 3301 IEV=1 , NBEVOL KEV=EV.IEVOLL (IEV) SEGACT KEV IF (KEV.TYPX (1:8).EQ.'LISTREEL') THEN LRX=KEV.IPROGX IF (KEV.TYPY (1:8).EQ.'LISTREEL') THEN LRY=KEV.IPROGY SEGACT LRX SEGACT LRY TABTR.YTYPE (IEV+1) = 'LISTREEL' DO 3300 IY=1 , ITABY-1 ENDIF 3300 CONTINUE 3308 CONTINUE SEGDES LRY ENDIF IF (KEV.TYPY (1:8).EQ.'LISTENTI') THEN LIY=KEV.IPROGY SEGACT LRX SEGACT LIY TABTR.YTYPE (IEV+1) = 'LISTENTI' DO 3310 IY=1 , ITABY-1 TABTR.ELEM (IEV+1,IY+1) = F_ITOA (LIY.LECT (IEL)) ENDIF 3310 CONTINUE 3318 CONTINUE SEGDES LIY ENDIF IF (KEV.TYPY (1:8).EQ.'LISTMOTS') THEN LMY=KEV.IPROGY SEGACT LRX SEGACT LMY TABTR.YTYPE (IEV+1) = 'LISTMOTS' DO 3330 IY=1 , ITABY-1 ENDIF 3330 CONTINUE 3338 CONTINUE SEGDES LMY ENDIF SEGDES LRX ENDIF IF (KEV.TYPX (1:8).EQ.'LISTENTI') THEN LIX=KEV.IPROGX IF (KEV.TYPY (1:8).EQ.'LISTREEL') THEN LRY=KEV.IPROGY SEGACT LIX SEGACT LRY TABTR.YTYPE (IEV+1) = 'LISTREEL' DO 3348 IEL=1 , LIX.LECT (/1) RA = DBLE (LIX.LECT (IEL)) DO 3340 IY=1 , ITABY-1 ENDIF 3340 CONTINUE 3348 CONTINUE SEGDES LRY ENDIF IF (KEV.TYPY (1:8).EQ.'LISTENTI') THEN LIY=KEV.IPROGY SEGACT LIX SEGACT LIY TABTR.YTYPE (IEV+1) = 'LISTENTI' DO 3358 IEL=1 , LIX.LECT (/1) RA = DBLE (LIX.LECT (IEL)) DO 3350 IY=1 , ITABY-1 TABTR.ELEM (IEV+1,IY+1) = F_ITOA (LIY.LECT (IEL)) ENDIF 3350 CONTINUE 3358 CONTINUE SEGDES LIY ENDIF IF (KEV.TYPY (1:8).EQ.'LISTMOTS') THEN LMY=KEV.IPROGY SEGACT LIX SEGACT LMY TABTR.YTYPE (IEV+1) = 'LISTMOTS' DO 3368 IEL=1 , LIX.LECT (/1) RA = DBLE (LIX.LECT (IEL)) DO 3360 IY=1 , ITABY-1 ENDIF 3360 CONTINUE 3368 CONTINUE SEGDES LMY ENDIF SEGDES LIX ENDIF SEGDES KEV 3301 CONTINUE ENDIF SEGDES EV SEGDES TABTR * RETURN * ***** FIN EVLIRE ***************************** *************************************************** *************************************************** * * LECTURE D'UN CHAMP PAR ELEMENT * *************************************************** ENTRY CELIRE ( CE, TABTR, EPSILN, ITABX, ITABY) *************************************************** ** INITIALISATION DES VARIABLE *************************************************** IF (TABTR.NE.0) SEGSUP TABTR *************************************************** ** ANALYSE DU CHAMP PAR ELEMENT => DIM DU TABLEAU *************************************************** IF (CE.EQ.0) RETURN SEGACT CE IF (CE.ICHAML (1).EQ.0) RETURN MCHAM1 = CE.ICHAML (1) SEGACT MCHAM1 ITABX = 1 DO 4020 IX=1,MCHAM1.TYPCHE (/2) c ici normalement il faut tester le type c IF (MCHAM1.TYPCHE (IX).EQ.'REEL*8') THEN ITAX=ITABX+1 c IF (MCHAM1.TYPCHE (IX).EQ.'REEL*4') THEN ITAX=ITABX+1 c IF (MCHAM1.TYPCHE (IX).EQ.'INTEGER') THEN ITAX=ITABX+1 itabx=itabx+1 4020 CONTINUE MELVA1 = MCHAM1.IELVAL (1) SEGACT MELVA1 NBNOEU=MELVA1.VELCHE (/1) NBELEM =MELVA1.VELCHE (/2) ITABY = 1 + NBNOEU*NBELEM IF (ITABY.EQ.1) RETURN SEGDES MELVA1 SEGDES MCHAM1 SEGDES CE *************************************************** * ** INITIALISATION DE LA STRUCTURE TABLEAU *************************************************** * * CALCUL DU NOMBRE DE PAGES * PAGESX = (ITABX-2) / 4 + 1 PAGESY = (ITABY-2) / 20 + 1 * * INITIALISE L'OJET TABTR * SEGINI TABTR *************************************************** * ** REMPLISSAGE DU TABLEAU *************************************************** SEGACT CE TABTR.TITGEN = CE.TITCHE MCHAM1 = CE.ICHAML (1) SEGACT MCHAM1 * INITIALISATION DE LA COLONNE 1 TABTR.TITCOL (1) = 'NOEUDS' TABTR.ELEM (1,1) = 'NOEUDS' IPT1 = CE.IMACHE (1) SEGACT IPT1 IY=2 DO 4040 IYN=1 , NBNOEU DO 4030 IYE=1 , NBELEM IVALRE = IPT1.NUM (IYN,IYE) TABTR.ELEM (1,IY) = F_ITOA (IVALRE) IY = IY+1 4030 CONTINUE 4040 CONTINUE SEGDES IPT1 * REMPLISSAGE DU RESTE DU TABLEAU IX = 2 DO 4200 IEX=1 , MCHAM1.IELVAL (/1) c ici normalement on ne prend que les types numeriques c cf teste ci-dessus c IF ( (MCHAM1.TYPCHE (IEX).EQ.'REEL*8') c # .OR. (MCHAM1.TYPCHE (IEX).EQ.'REEL*4') c # .OR. (MCHAM1.TYPCHE (IEX).EQ.'INTEGER')) THEN TABTR.TITCOL (IX) = MCHAM1.NOMCHE (IEX) TABTR.ELEM (IX,1) = MCHAM1.NOMCHE (IEX) MELVA1 = MCHAM1.IELVAL (IEX) SEGACT MELVA1 IY = 2 DO 4060 IYN=1 , NBNOEU DO 4050 IYE=1 , NBELEM RA=MELVA1.VELCHE (IYN,IYE) TABTR.ELEM (IX,IY ) = F_LTOA (RA) IY = IY+1 4050 CONTINUE 4060 CONTINUE SEGDES MELVA1 IX=IX+1 c ENDIF 4200 CONTINUE SEGDES MCHAM1 SEGDES CE * SEGDES TABTR * RETURN * ***** FIN DE TBLIRE ************************* *************************************************** *************************************************** * * LECTURE D'UN OBJET CHPOINT * *************************************************** ENTRY CHLIRE ( CH, TABTR, EPSILN, ITABX, ITABY) *************************************************** ** INITIALISATION DES VARIABLE *************************************************** IF (TABTR.NE.0) SEGSUP TABTR *************************************************** ** ANALYSE DU CHPOINT: DIM DU TABLEAU *************************************************** IF (CH.EQ.0) RETURN SEGACT CH MSOUP1 = CH.IPCHP (1) SEGACT MSOUP1 ITABX = MSOUP1.NOCOMP (/2) + 1 IPT1 = MSOUP1.IGEOC SEGACT IPT1 ITABY = IPT1.NUM (/2) + 1 SEGDES IPT1 SEGDES MSOUP1 SEGDES CH *************************************************** * ** INITIALISATION DE LA STRUCTURE TABLEAU *************************************************** * * CALCUL DU NOMBRE DE PAGES * PAGESX = (ITABX-2) / 4 + 1 PAGESY = (ITABY-2) / 20 + 1 * * INITIALISE L'OJET TABTR * SEGINI TABTR * * RECHERCHE LES TITRES: GENERAL, COL, ETC * SEGACT CH TABTR.TITGEN = CH.MOCHDE TABTR.SSTITR = ' ' MSOUP1 = CH.IPCHP (1) SEGACT MSOUP1 DO 5208 IX=2 , ITABX TABTR.TITCOL (IX) = MSOUP1.NOCOMP (IX-1) 5208 CONTINUE SEGDES MSOUP1 SEGDES CH *************************************************** * REMPLIT LE TABLEAU EN CONVERTISSANT TOUT EN CHAINES *************************************************** SEGACT CH MSOUP1 = CH.IPCHP (1) SEGACT MSOUP1 MPOVA1 = MSOUP1.IPOVAL SEGACT MPOVA1 DO 5218 IX=1 , ITABX-1 TABTR.ELEM (IX+1,1)=MSOUP1.NOCOMP (IX) DO 5216 IY=1 , ITABY-1 TABTR.ELEM (IX+1,IY+1)=F_LTOA (MPOVA1.VPOCHA (IY,IX)) 5216 CONTINUE 5218 CONTINUE IPT1=MSOUP1.IGEOC SEGACT IPT1 DO 5220 IY=1 , ITABY-1 TABTR.ELEM (1,IY+1)=F_ITOA (IPT1.NUM (1,IY)) 5220 CONTINUE SEGDES IPT1 SEGDES MPOVA1 SEGDES MSOUP1 SEGDES CH * SEGDES TABTR RETURN * ***** FIN DE CHLIRE ************************* *************************************************** * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales