lialin
C LIALIN SOURCE GOUNAND 21/06/02 21:17:09 11022 $ FVPR,FVDU,FCPR,FCDU, $ KDERPR,KDERDU, $ JDTJA2,SSFACT,NBELEF,LERF,IESREF, $ JMTLIA, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : LIALIN C DESCRIPTION : C C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : LIALI1 (calcul de JMTLIA (fortran 77)) C APPELE PAR : NLIA C*********************************************************************** C ENTREES : C ENTREES/SORTIES : C SORTIES : - C TRAVAIL : C*********************************************************************** C VERSION : v1, 11/05/04, version initiale C HISTORIQUE : v1, 11/05/04, création C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** -INC PPARAM -INC CCOPTIO -INC TNLIN *-INC SMCHAEL INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM POINTEUR JXPOPG.MCHEVA POINTEUR FVPR.MCHEVA,FVDU.MCHEVA POINTEUR FCPR.MCHEVA,FCDU.MCHEVA POINTEUR JDTJA2.MCHEVA POINTEUR JMTLIA.MCHEVA *-INC SFACTIV * INTEGER KDERPR,KDERDU INTEGER LERF INTEGER IMPR,IRET * INTEGER NDLIG,NDCOL,N2DLIG,N2DCOL,NDNOEU,NDELM INTEGER NLDTJ,NLMLIA INTEGER NDDLPR,NDDLDU,IESREL,NBPOGO * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans lialin' * IF (KDERPR.LT.0.OR.KDERPR.GT.IDIM) THEN WRITE(IOIMP,*) 'Erreur KDERPR=',KDERPR GOTO 9999 ENDIF * IF (KDERDU.LT.0.OR.KDERDU.GT.IDIM) THEN WRITE(IOIMP,*) 'Erreur KDERDU=',KDERDU GOTO 9999 ENDIF * IESREL=IDIM IF (LERF.NE.0) THEN IESDER=IESREF ELSE IESDER=IESREL ENDIF * SEGACT SSFACT NBELFV=SSFACT.LFACTI(/1) NBELEV=SSFACT.LFACTI(/2) * SEGACT JXPOPG NDLIG=JXPOPG.WELCHE(/1) NDCOL=JXPOPG.WELCHE(/2) N2DLIG=JXPOPG.WELCHE(/3) N2DCOL=JXPOPG.WELCHE(/4) NDNOEU=JXPOPG.WELCHE(/5) NDELM=JXPOPG.WELCHE(/6) IF (NDLIG.NE.1.OR.NDCOL.NE.1.OR.N2DLIG.NE.1 $ .OR.N2DCOL.NE.1.OR.NDELM.NE.1) THEN WRITE(IOIMP,*) 'Erreur dims JXPOPG' GOTO 9999 ENDIF NBPOGO=NDNOEU * SEGACT FVPR NDLIG=FVPR.WELCHE(/1) NDCOL=FVPR.WELCHE(/2) N2DLIG=FVPR.WELCHE(/3) N2DCOL=FVPR.WELCHE(/4) NDNOEU=FVPR.WELCHE(/5) NDELM=FVPR.WELCHE(/6) IF (NDLIG.NE.1.OR.N2DLIG.NE.1.OR. $ ((N2DCOL.NE.1.AND.KDERPR.EQ.0) $ .OR.(N2DCOL.NE.IESDER.AND.KDERPR.NE.0)) $ .OR.(NDNOEU.NE.1.AND.NDNOEU.NE.NBPOGO) $ .OR.(.NOT.(NDELM.EQ.1.OR.(KDERPR.NE.0.AND.NDELM.EQ.NBELEF) $ .OR.(KDERPR.EQ.0.AND.NDELM.EQ.NBELFV) $ ))) THEN WRITE(IOIMP,*) 'FVPR=',FVPR WRITE(IOIMP,*) 'KDERPR=',KDERPR WRITE(IOIMP,*) 'IESREL=',IESREL WRITE(IOIMP,*) 'NBPOGO=',NBPOGO WRITE(IOIMP,*) 'NBELEF=',NBELEF WRITE(IOIMP,*) 'NBELFV=',NBELFV WRITE(IOIMP,*) 'NDLIG=',NDLIG WRITE(IOIMP,*) 'NDCOL=',NDCOL WRITE(IOIMP,*) 'N2DLIG=',N2DLIG WRITE(IOIMP,*) 'N2DCOL=',N2DCOL WRITE(IOIMP,*) 'NDNOEU=',NDNOEU WRITE(IOIMP,*) 'NDELM=',NDELM WRITE(IOIMP,*) 'Erreur dims FVPR' GOTO 9999 ENDIF NDDLPR=NDCOL N2FVPR=N2DCOL NPFVPR=NDNOEU NLFVPR=NDELM * SEGACT FVDU NDLIG=FVDU.WELCHE(/1) NDCOL=FVDU.WELCHE(/2) N2DLIG=FVDU.WELCHE(/3) N2DCOL=FVDU.WELCHE(/4) NDNOEU=FVDU.WELCHE(/5) NDELM=FVDU.WELCHE(/6) IF (NDLIG.NE.1.OR.N2DLIG.NE.1.OR. $ ((N2DCOL.NE.1.AND.KDERDU.EQ.0) $ .OR.(N2DCOL.NE.IESDER.AND.KDERDU.NE.0)) $ .OR.(NDNOEU.NE.1.AND.NDNOEU.NE.NBPOGO) $ .OR.(.NOT.(NDELM.EQ.1.OR.(KDERDU.NE.0.AND.NDELM.EQ.NBELEF) $ .OR.(KDERDU.EQ.0.AND.NDELM.EQ.NBELFV) $ ))) THEN WRITE(IOIMP,*) 'FVDU=',FVDU WRITE(IOIMP,*) 'KDERDU=',KDERDU WRITE(IOIMP,*) 'IESREL=',IESREL WRITE(IOIMP,*) 'NBPOGO=',NBPOGO WRITE(IOIMP,*) 'NBELEF=',NBELEF WRITE(IOIMP,*) 'NBELFV=',NBELFV WRITE(IOIMP,*) 'NDLIG=',NDLIG WRITE(IOIMP,*) 'NDCOL=',NDCOL WRITE(IOIMP,*) 'N2DLIG=',N2DLIG WRITE(IOIMP,*) 'N2DCOL=',N2DCOL WRITE(IOIMP,*) 'NDNOEU=',NDNOEU WRITE(IOIMP,*) 'NDELM=',NDELM WRITE(IOIMP,*) 'Erreur dims FVDU' GOTO 9999 ENDIF NDDLDU=NDCOL N2FVDU=N2DCOL NPFVDU=NDNOEU NLFVDU=NDELM * SEGACT FCPR NDLIG =FCPR.WELCHE(/1) NDCOL =FCPR.WELCHE(/2) N2DLIG=FCPR.WELCHE(/3) N2DCOL=FCPR.WELCHE(/4) NDNOEU=FCPR.WELCHE(/5) NDELM =FCPR.WELCHE(/6) IF (NDLIG.NE.1.OR.NDCOL.NE.1.OR.N2DLIG.NE.1.OR. $ N2DCOL.NE.1 $ .OR.(NDNOEU.NE.1.AND.NDNOEU.NE.NBPOGO) $ .OR.(NDELM.NE.1.AND.NDELM.NE.NBELEF)) THEN WRITE(IOIMP,*) 'Erreur dims FCPR' GOTO 9999 ENDIF NPFCPR=NDNOEU NLFCPR=NDELM * SEGACT FCDU NDLIG =FCDU.WELCHE(/1) NDCOL =FCDU.WELCHE(/2) N2DLIG=FCDU.WELCHE(/3) N2DCOL=FCDU.WELCHE(/4) NDNOEU=FCDU.WELCHE(/5) NDELM =FCDU.WELCHE(/6) IF (NDLIG.NE.1.OR.NDCOL.NE.1.OR.N2DLIG.NE.1.OR. $ N2DCOL.NE.1. $ .OR.(NDNOEU.NE.1.AND.NDNOEU.NE.NBPOGO) $ .OR.(NDELM.NE.1.AND.NDELM.NE.NBELEF)) THEN WRITE(IOIMP,*) 'NDLIG=',NDLIG WRITE(IOIMP,*) 'NDCOL=',NDCOL WRITE(IOIMP,*) 'N2DLIG=',N2DLIG WRITE(IOIMP,*) 'N2DCOL=',N2DCOL WRITE(IOIMP,*) 'NDNOEU=',NDNOEU WRITE(IOIMP,*) 'NDELM=',NDELM WRITE(IOIMP,*) 'Erreur dims FCDU' GOTO 9999 ENDIF NPFCDU=NDNOEU NLFCDU=NDELM * SEGACT JDTJA2 NDLIG=JDTJA2.WELCHE(/1) NDCOL=JDTJA2.WELCHE(/2) N2DLIG=JDTJA2.WELCHE(/3) N2DCOL=JDTJA2.WELCHE(/4) NDNOEU=JDTJA2.WELCHE(/5) NDELM=JDTJA2.WELCHE(/6) IF (NDLIG.NE.1.OR.NDCOL.NE.1.OR.N2DLIG.NE.1 $ .OR.N2DCOL.NE.1 $ .OR.(NDNOEU.NE.1.AND.NDNOEU.NE.NBPOGO) $ .OR.(NDELM.NE.1.AND.NDELM.NE.NBELEF)) THEN WRITE(IOIMP,*) 'Erreur dims JDTJA2' GOTO 9999 ENDIF NPDTJ=NDNOEU NLDTJ=NDELM * IF (JMTLIA.EQ.0) THEN NBLIG=NDDLDU NBCOL=NDDLPR N2LIG=1 N2COL=1 NBPOI=1 NBELM=NBELEV SEGINI JMTLIA ELSE SEGACT JMTLIA*MOD NDLIG=JMTLIA.WELCHE(/1) NDCOL=JMTLIA.WELCHE(/2) N2DLIG=JMTLIA.WELCHE(/3) N2DCOL=JMTLIA.WELCHE(/4) NDNOEU=JMTLIA.WELCHE(/5) NDELM=JMTLIA.WELCHE(/6) IF (NDLIG.NE.NDDLDU.OR.NDCOL.NE.NDDLPR.OR.N2DLIG.NE.1 $ .OR.N2DCOL.NE.1.OR.NDNOEU.NE.1 $ .OR.(NDELM.NE.1.AND.NDELM.NE.NBELEV)) THEN WRITE(IOIMP,*) 'Erreur dims JMTLIA' GOTO 9999 ENDIF ENDIF * KDFRPR=MAX(1,KDERPR) KDFRDU=MAX(1,KDERDU) * * On effectue le calcul de la matrice de moindres carrés * $ N2FVPR,N2FVDU, $ NPFVPR,NPFVDU,NPFCPR,NPFCDU,NPDTJ, $ NLFVPR,NLFVDU,NLFCPR,NLFCDU,NLDTJ, $ KDFRPR,KDFRDU, $ KDERPR,KDERDU, $ JXPOPG.WELCHE, $ FVPR.WELCHE,FVDU.WELCHE,FCPR.WELCHE,FCDU.WELCHE, $ JDTJA2.WELCHE,SSFACT.LFACTI,NBELEV,NBELFV,LERF, $ JMTLIA.WELCHE, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * SEGDES JMTLIA SEGDES JMTLIA SEGDES JDTJA2 SEGDES FCDU SEGDES FCPR SEGDES FVDU SEGDES FVPR SEGDES JXPOPG SEGDES SSFACT * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine lialin' RETURN * * End of subroutine LIALIN * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales