selloi
C SELLOI SOURCE OF166741 25/10/03 21:15:06 12350 *======================================================================* * * OBJET : Composante de type TABLE * ------- * La TABLE donne le nom de la loi et les parametres de la composante, * en fonction desquels doit se faire l'evaluation externe. * * ENTREE : * -------- * IPTABE Pointeur sur la TABLE de definition de la LOI externe * Le segment est DESACTIVE en Sortie (SEGDES) * * SORTIE : * -------- * IPTABS Pointeur sur la TABLE preconditionnee * < 0 ou = 0 si erreur lors de l'analyse * Le segment est ACTIF en Sortie (SEGACT*NOMOD) *======================================================================* SUBROUTINE SELLOI(IPTABE,IPTABS,IRET) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCPRECO -INC CCNOYAU -INC SMLMOTS -INC SMTABLE CHARACTER*(LOCHAI) MOTEMP,LMELIB,LMEFCT iimpi0 = IIMPI c*dbg iimpi0 = 1972 IPTABS = 0 mtab1 = IPTABE C- Recherche si la table IPTABE n'a pas deja ete traite : C- Verification si presence dans le preconditionnement "CLOIEX" (CCPRECO) isloi = 0 DO is = 1, NBELOI IF ( LOITAB(is).LE.0 ) GOTO 10 isloi = isloi + 1 IF ( mtab1 .EQ. LOITAB(is) ) THEN mtab2 = LOIPRE(is) if (iimpi0.eq.1972) then write(ioimp,*) 'Preconditionnement SELLOI trouve', & is,mtab1,mtab2 endif C Mise a jour du preconditionnement dans CCPRECO : Deplacement en position 1 IF (is .GT. 1) THEN DO js = is, 2, -1 LOITAB(js) = LOIPRE(js-1) LOIPRE(js) = LOIPRE(js-1) ENDDO LOITAB(1) = mtab1 LOIPRE(1) = mtab2 ENDIF SEGACT,mtab2*NOMOD IPTABS = mtab2 GOTO 100 ENDIF ENDDO 10 CONTINUE if (iimpi0.eq.1972) then write(ioimp,*) 'Preconditionnement SELLOI :',isloi,'/',NBELOI endif C- Verification du contenu de la table & Ajout au preconditionnement : SEGACT,mtab1 IF (NBESC.NE.0) SEGACT,IPILOC ierloc = 0 C- Recherche sur les noms C Initialisation des indices NPARA = 0 MLMOT1 = 0 ITROU1 = 0 LMELIB = ' ' LMELGB = 0 LMEFCT = ' ' LMELGT = 0 LMEPTR = 0 LMELOI = 0 ITROU2 = 0 LMEPRO = 0 C Verification des types des indices correspondants DO IN = 1, mtab1.MLOTAB IF (mtab1.MTABTI(IN).EQ.'MOT') THEN ip = mtab1.MTABII(IN) IDEBCH = IPCHAR(ip) IFINCH = IPCHAR(ip+1)-1 MOTEMP = ICHARA(IDEBCH:IFINCH) C Liste des parametres de la loi IF ((MOTEMP.EQ.'PARA_LOI' ) .OR. & (MOTEMP.EQ.'VARIABLES')) THEN IF (mtab1.MTABTV(IN).EQ.'LISTMOTS') THEN MLMOT1 = mtab1.MTABIV(IN) ELSE MLMOT1 = 0 IERR = 0 IERGLB = 0 MOTERR = ' ' MOTERR( 1:11) = MOTEMP MOTERR(12:19) = 'LISTMOTS' ierloc = ierloc + 1 ENDIF C Nom de la loi/fonction a utiliser dans la bibliotheque ELSE IF ((MOTEMP.EQ.'FCT_LOI') .OR. & (MOTEMP.EQ.'MODELE' )) THEN IF (mtab1.MTABTV(IN).EQ.'MOT ') THEN ip = mtab1.MTABIV(IN) IDEBCH = IPCHAR(ip) IFINCH = IPCHAR(ip+1)-1 LMELGT = IFINCH-IDEBCH+1 IF (LMELGT.LE.0 .OR. LMELGT.GT.LOCHAI) THEN IERR = 0 IERGLB = 0 INTERR(1) = LMELGT MOTERR = ICHARA(IDEBCH:IFINCH) IERR = 0 IERGLB = 0 LMELGT = 0 ierloc = ierloc + 1 ELSE LMEFCT = ICHARA(IDEBCH:IFINCH) ITROU1 = ITROU1+1 ENDIF ELSE IERR = 0 IERGLB = 0 MOTERR = ' ' MOTERR( 1:11) = MOTEMP MOTERR(12:19) = 'MOT ' ierloc = ierloc + 1 ENDIF C Nom de la bibliotheque ou se trouve la loi materiau ELSE IF ((MOTEMP.EQ.'LIB_LOI ') .OR. & (MOTEMP.EQ.'LIBRAIRIE')) THEN IF (mtab1.MTABTV(IN).EQ.'MOT ') THEN ip = mtab1.MTABIV(IN) IDEBCH = IPCHAR(ip) IFINCH = IPCHAR(ip+1)-1 LMELGB = IFINCH-IDEBCH+1 IF (LMELGB.LE.0 .OR. LMELGB.GT.LOCHAI) THEN IERR = 0 IERGLB = 0 INTERR(1) = LMELGB MOTERR = ICHARA(IDEBCH:IFINCH) IERR = 0 IERGLB = 0 LMELGT = 0 ierloc = ierloc + 1 ELSE LMELIB = ICHARA(IDEBCH:IFINCH) ITROU1 = ITROU1+10 ENDIF ELSE IERR = 0 IERGLB = 0 MOTERR = ' ' MOTERR( 1:11) = MOTEMP MOTERR(12:19) = 'MOT ' ierloc = ierloc + 1 ENDIF C Nom du programme externe ELSE IF (MOTEMP.EQ.'PROGRAMME') THEN IF (mtab1.MTABTV(IN).EQ.'MOT ') THEN ip = mtab1.MTABIV(IN) IDEBCH = IPCHAR(ip) IFINCH = IPCHAR(ip+1)-1 LMEPRO = IFINCH-IDEBCH+1 IF (LMEPRO.LE.0 .OR. LMEPRO.GT.LOCHAI) THEN IERR = 0 IERGLB = 0 INTERR(1) = LMEPRO MOTERR = ICHARA(IDEBCH:IFINCH) IERR = 0 IERGLB = 0 LMEPRO = 0 ierloc = ierloc + 1 ELSE LMEPRO = ip ITROU2 = 1 ENDIF ELSE IERR = 0 IERGLB = 0 MOTERR = ' ' MOTERR( 1:11) = MOTEMP MOTERR(12:19) = 'MOT ' ierloc = ierloc + 1 ENDIF ENDIF ENDIF ENDDO IF (ierloc.GT.0) GOTO 30 C Dernieres verifications de la table IF (MLMOT1.EQ.0) THEN MOTERR = 'ERROR: PARA_LOI missing' ierloc = ierloc + 1 ENDIF IF ((ITROU1.EQ.0).AND.(ITROU2.EQ.0)) THEN MOTERR = 'ERROR: PROGRAMME and LIB_LOI/FCT_LOI missing' ierloc = ierloc + 1 ENDIF IF ((ITROU1.NE.0).AND.(ITROU2.NE.0)) THEN MOTERR = 'ERROR: neither PROGRAMME nor LIB_LOI/FCT_LOI' ierloc = ierloc + 1 GOTO 30 ENDIF IF (ITROU1.NE.0) THEN IF (ITROU1.NE.11) THEN MOTERR = 'ERROR: LIB_LOI or FCT_LOI missing' ierloc = ierloc + 1 ENDIF ENDIF IF (ierloc.GT.0) THEN INTERR(1) = -3 GOTO 30 ENDIF SEGACT,MLMOT1 SEGDES,MLMOT1 IF (ITROU1.NE.0) THEN ip = NPARA CALL LEXTOP(LMELIB,LMEFCT,ip,LMELOI,LMEPTR) IF (IERR.NE.0) GOTO 30 ENDIF C- Verification de la table reussie - Creation de la table preconditionnee : M = 4 SEGINI,mtab2 mtab2.MLOTAB = M mtab2.MTABTI(1) = 'ENTIER ' mtab2.MTABII(1) = 0 mtab2.MTABTV(1) = 'ENTIER ' IF (ITROU1.NE.0) THEN mtab2.MTABIV(1) = 1 ELSE mtab2.MTABIV(1) = 2 ENDIF mtab2.MTABTI(2) = 'ENTIER ' mtab2.MTABII(2) = 1 mtab2.MTABTV(2) = 'ENTIER ' mtab2.MTABIV(2) = NPARA mtab2.MTABTI(3) = 'ENTIER ' mtab2.MTABII(3) = 2 mtab2.MTABTV(3) = 'LISTMOTS' mtab2.MTABIV(3) = MLMOT1 mtab2.MTABTI(4) = 'ENTIER ' mtab2.MTABII(4) = 3 IF (ITROU1.NE.0) THEN mtab2.MTABTV(4) = 'ENTIER ' mtab2.MTABIV(4) = LMEPTR ELSE mtab2.MTABTV(4) = 'MOT ' mtab2.MTABIV(4) = LMEPRO ENDIF if (iimpi0.eq.1972) then endif SEGACT,mtab2*NOMOD C- Ajout en position 1 dans le preconditionnement "CLOIEX" (CCPRECO) if (isloi.eq.NBELOI) then moterr = 'Warning "CLOIEX": maximum NBELOI atteint' end if isloi = MIN(isloi + 1,NBELOI) DO is = isloi, 2, -1 LOITAB(is) = LOIPRE(is-1) LOIPRE(is) = LOIPRE(is-1) ENDDO LOITAB(1) = mtab1 LOIPRE(1) = mtab2 LOITAB(0) = isloi IPTABS = mtab2 if (iimpi0.eq.1972) then write(ioimp,*) 'Preconditionnement SELLOI ',iptabe,iptabs,isloi endif C- Fin du traitement 30 CONTINUE SEGDES,mtab1 if (NBESC.NE.0) SEGDES,IPILOC 100 CONTINUE c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales