nfil
C NFIL SOURCE FD218221 25/12/15 21:15:03 12426 SUBROUTINE NFIL ************************************************************************ C NOM : NFIL C DESCRIPTION : L'operateur NFIL sert a normaliser/modifier C une matrice de filtragea (cree avec MFIL). ************************************************************************ C APPELE PAR : pilot.eso ************************************************************************ C SYNTAXE (GIBIANE) : C C HN = NFIL H HS ; C HM = NFIL H HS 'MODI' ; C C H : Martice de filtrage initiale C (RIGIDITE calculee par MFIL) C C HS : Vecteur de la somme des poids de filtrage C (CHPOINT egal a H * un CHPOINT unitaire) C C HN : Matrice "normalisee" (les termes de chaque ligne i sont C divises par la i-eme composante de HS) C C HM : Matrice "modifiee" (les termes de chaque colonne i sont C divises par la i-eme composante de HS) C ************************************************************************ C Typages implicites classiques IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C Includes des segments utiles -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMRIGID -INC SMCHPOI -INC SMELEME C Mots clefs PARAMETER (LCLE=1) CHARACTER*4 MOCLE(LCLE) DATA MOCLE/'MODI'/ C Quelques objets utiles CHARACTER*(LOCHPO) MOT1 C Lecture du mot clef C Lecture de la RIGIDITE IF (IERR.NE.0) RETURN C Lecture du CHPOINT IF (IERR.NE.0) RETURN C Petite verification du CHPOINT NSOUPO=MCHPO1.IPCHP(/1) IF (NSOUPO.EQ.0) THEN RETURN ENDIF C Initialisation de la matrice resultat RI2 (sur la base de RI1) SEGINI,RI2=RI1 C Normalisation/Modification de la matrice NRIGEL=RI2.IRIGEL(/2) C Boucle sur les sous matrices DO IM=1,NRIGEL C Initialisation des taleaux XMATRI de RI2 (sur la base de RI1) XMATR1=RI1.IRIGEL(4,IM) SEGINI,XMATR2=XMATR1 RI2.IRIGEL(4,IM)=XMATR2 NLIGRD=XMATR2.RE(/1) NLIGRP=XMATR2.RE(/2) NELRIG=XMATR2.RE(/3) IPT2=RI2.IRIGEL(1,IM) DES2=RI2.IRIGEL(3,IM) SEGACT IPT2,DES2 C Boucle sur les elements DO IE=1,NELRIG C Boucle sur les inconnues C Si ICLE=0 : normalistion des lignes (on parcourt les duales) IF (ICLE.EQ.0) THEN NINC=NLIGRD C Si ICLE=1 : normalisation des colonnes (on parcourt les primales) ELSEIF(ICLE.EQ.1) THEN NINC=NLIGRP ENDIF DO IINC=1,NINC C Nom de l'inconnue (MOT1) et noeud (IGLO1) IF (ICLE.EQ.0) THEN MOT1=DES2.LISDUA(IINC) ILOC1=DES2.NOELED(IINC) ELSEIF(ICLE.EQ.1) THEN MOT1=DES2.LISINC(IINC) ILOC1=DES2.NOELEP(IINC) ENDIF IGLO1=IPT2.NUM(ILOC1,IE) C Extraction dans le CHPOINT de la valeur de la C composante MOT1 au noeud IGLO1 C Si le point n'est pas present dans MCHPO1, on itere IF (IRET.EQ.0) THEN GOTO 10 ENDIF C Si la valeur du champ est nulle, on itere IF (ABS(XVAL).LT.XPETIT) THEN GOTO 10 ENDIF C Division des temres concernes C Pour la normalistion des lignes, on boucle sur les primales IF (ICLE.EQ.0) THEN DO J=1,NLIGRP XMATR2.RE(IINC,J,IE)=XMATR2.RE(IINC,J,IE)/XVAL ENDDO C Pour la normalistion par colonne, on boucle sur les duales ELSEIF(ICLE.EQ.1) THEN DO J=1,NLIGRD XMATR2.RE(J,IINC,IE)=XMATR2.RE(J,IINC,IE)/XVAL ENDDO ENDIF 10 CONTINUE ENDDO ENDDO SEGDES IPT2,DES2,XMATR2 ENDDO C Menage SEGDES RI2,MCHPO1 C Et c'est fini RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales