C NNOR SOURCE CHAT 05/01/13 01:57:53 5004 SUBROUTINE NNOR ************************************************************************ * * N N O R * ------- * * SOUS-PROGRAMME ASSOCIE A L'OPERATEUR "NNOR" * * FONCTION: * --------- * * RAMENER EVENTUELLEMENT LES COMP. P ET PI D'UN OBJET A LEUR * VALEURS REELLES PUIS * NORMER CET OBJET EN LE DIVISANT PAR SA PLUS GRANDE VALEUR (DE * TELLE SORTE QUE SON PLUS GRAND TERME DEVIENNE 1). * * PHRASE D'APPEL (EN GIBIANE): * ---------------------------- * * |(AVEC)| * NNOR OBJET1 (| | COMPOS ) (RORF X1 CREF X2 LCAR X3 ); * | SANS | * * * LES PARENTHESES INDIQUANT DES ARGUMENTS FACULTATIFS. * * ARGUMENTS (EN GIBIANE): * ----------------------- * * OBJET1 TYPE_1 OBJET QUE L'ON NORME. * AVEC 'MOT ' MOT-CLE INDIQUANT QUE L'ON REGARDE * UNIQUEMENT,DANS LA RECHERCHE DU MAXIMUM, * LES VALEURS ASSOCIEES AUX COMPOSANTES CITEES * DANS "COMPOS". * C'EST L'OPTION PAR DEFAUT. * SANS 'MOT ' MOT-CLE INDIQUANT QUE L'ON EXCLUT, DANS LA * RECHERCHE DU MAXIMUM, LES VALEURS ASSOCIEES * AUX COMPOSANTES CITEES DANS "COMPOS". * COMPOS 'LISTMOTS' LISTE DES NOMS DES COMPOSANTES COMPRISES * OU EXCLUES. * * LES VALEURS POSSIBLES DE "TYPE_1" SONT: * - 'CHPOINT' (LES COMPOSANTES SONT ALORS UX, UY, UZ, LX, ...), * - ... (A COMPLETER AU FUR ET A MESURE) * * DICTIONNAIRE DES VARIABLES: (ORDRE ALPHABETIQUE) * --------------------------- * * IPLMOT ENTIER POINTEUR DE L'OBJET "COMPOS". * IPOINT ENTIER POINTEUR DE L'OBJET "OBJET1". * IPOS ENTIER NUMERO D'ORDRE DU TYPE DE L'OBJET "OBJET1" DANS * LA LISTE CONTENUE DANS "LISTYP". * LISTYP ENTIER CONTIENT LES NOMS DES DIFFERENTS TYPES D'OBJET * DONT ON PEUT RECHERCHER LA PLUS GRANDE VALEUR. * MOTCLE CHARACTER CONTIENT LA CHAINE DE CARACTERES 'AVEC' OU * 'SANS'. * NBTYPE ENTIER NOMBRE DE NOMS DANS "LISTYP". * * MODE DE FONCTIONNEMENT: * ----------------------- * * APPEL D'UN SOUS-PROGRAMME DISTINCT SELON LE TYPE DE L'OBJET * "OBJET1". * * SOUS-PROGRAMMES APPELES: * ------------------------ * * LIRE, LIRTYP, LIRMOT, NORMA3,NORMA4 * * AUTEUR, DATE DE CREATION: * ------------------------- * * FARVACQUE JUIN 86 * * LANGAGE: * -------- * * FORTRAN77 + EXTENSION: CARACTERES MIS DANS DES ENTIERS * ************************************************************************ * IMPLICIT INTEGER(I-N) -INC CCOPTIO * REAL*8 PGRAND,FLUI(3),COEFP,COEFPI,RET * PARAMETER (NBTYPE = 3) PARAMETER (LCLEF = 5) * CHARACTER*8 LISTYP(NBTYPE),MONTYP CHARACTER*4 MOCLEF(LCLEF),MOTCLE * DATA LISTYP/'CHPOINT ','SOLUTION','TABLE '/ DATA MOCLEF/'RORF','CREF','LCAR','AVEC','SANS'/ * * -- LECTURE DU MOT-CLE -- * IFLUI=0 MOTCLE = ' ' * 1 ICODE = 0 CALL LIRMOT(MOCLEF,LCLEF,IVAL,ICODE) IF(IVAL.EQ.1 .OR. IVAL.EQ.2 .OR. IVAL.EQ.3) THEN CALL LIRREE(RET,1,IRETOU) IF(IERR.NE.0) RETURN FLUI(IVAL)=RET IFLUI=IFLUI + 2**IVAL ELSE IF(IVAL.EQ.4 .OR. IVAL.EQ.5) THEN ELSE GOTO 2 ENDIF GOTO 1 * * -- LECTURE DE LA LISTE DE TYPES DE COMPOSANTE -- * 2 ICODE = 0 CALL LIROBJ ('LISTMOTS',IPLMOT,ICODE,IRETOU) IF (IRETOU .EQ. 0) THEN IPLMOT = 0 ELSE IF (MOTCLE .EQ. ' ') THEN * PAR DEFAUT, LES COMPOSANTES NOMMEES SONT LES COMPOSANTES * PRISES EN COMPTE (ET NON PAS LES COMPOSANTES EXCLUES): MOTCLE = 'AVEC' END IF * * -- LECTURE DE L'OBJET -- * NBTYP = NBTYPE CALL QUETYP(MONTYP,0,IRETOU) IF (IRETOU.EQ.0) THEN CALL ERREUR(533) RETURN ENDIF DO 10 IPOS=1,NBTYP IF (MONTYP.EQ.LISTYP(IPOS)) GOTO 11 10 CONTINUE MOTERR(1:8)=MONTYP CALL ERREUR(39) RETURN 11 CONTINUE IF (IPOS.EQ.3) THEN CALL LIRTAB('BASE_DE_MODES',ITBAS,1,IRETOU) ELSE CALL LIROBJ(MONTYP,IPOINT,1,IRETOU) ENDIF * * -- NORMALISATION -- * IF(IFLUI.EQ.0) THEN COEFP=0.D0 COEFPI=0.D0 ELSE IF(IFLUI.EQ.14) THEN IF(FLUI(3).EQ.0.D0) THEN CALL ERREUR(284) RETURN ENDIF COEFP= FLUI(1)*FLUI(2)*FLUI(2)/FLUI(3) COEFPI=FLUI(1)*FLUI(3) ELSE CALL ERREUR(284) * IL MANQUE DES VALEURS ENDIF * IF (IPOS .EQ. 1) THEN * * NORMALISATION D'UN "CHPOINT": IPLACE=0 CALL NORMA3 (IPOINT,IPLMOT,MOTCLE,IFLUI,COEFP,COEFPI,IPLACE, 1 PGRAND) IF (IERR .NE. 0) RETURN * ELSE IF (IPOS .EQ. 2) THEN * * NORMALISATION D'UN "MSOLUT DE SOUS TYPE MODE": CALL NORMA4 (IPOINT,IPLMOT,MOTCLE,IFLUI,COEFP,COEFPI) IF (IERR .NE. 0) RETURN * ELSE IF (IPOS .EQ. 3) THEN * * NORMALISATION D'UNE TABLE DE SOUS TYPE "BASE_DE_MODES" CALL NORMA5 (ITBAS,IPLMOT,MOTCLE,IFLUI,COEFP,COEFPI) IF (IERR .NE. 0) RETURN * * ELSE IF (IPOS .EQ. 4) THEN * ETC.... * END IF * END