C PRLIN4 SOURCE GOUNAND 06/01/18 21:15:56 5293 SUBROUTINE PRLIN4(TABVDC,TATRAV, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : PRLIN4 C DESCRIPTION : * Dans PRLIN4, on explicite ce que l'on va vraiment devoir * calculer dans TATRAV 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 : C APPELE PAR : PRLIN2 C*********************************************************************** C ENTREES : C SORTIES : C TRAVAIL : C C*********************************************************************** C VERSION : v1, 19/12/2005, version initiale C HISTORIQUE : v1, 19/12/2005, 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 CCOPTIO CBEGININCLUDE SLCOMP SEGMENT COMP CHARACTER*8 NOMCOM INTEGER DERCOF(NCOCOF) LOGICAL LTREF ENDSEGMENT SEGMENT COMPS POINTEUR LISCOM(NBCOMP).COMP ENDSEGMENT CENDINCLUDE SLCOMP POINTEUR MYCOMP.COMP -INC SMLENTI POINTEUR LDAT.MLENTI POINTEUR POWCOF.MLENTI CBEGININCLUDE SMPOUET SEGMENT TABGEO CHARACTER*4 DISGEO POINTEUR IGEO.MCHAEL ENDSEGMENT SEGMENT TABVDC INTEGER VVARPR(NUMVPR) INTEGER VVARDU(NUMVDU) INTEGER VDATPR(NUMDPR) INTEGER VDATDU(NUMDDU) INTEGER VCOFPR(NUMCPR) INTEGER VCOFDU(NUMCDU) INTEGER ILCPR(NUMDER+1,NUMOP,NUMVPR) INTEGER ILCDU(NUMDER+1,NUMOP,NUMVDU) POINTEUR VLCOF(JLCOF).MLENTI POINTEUR VCOMP(JGCOF).COMP POINTEUR VLDAT(JGCOF).MLENTI INTEGER DJSVD(JGVD) POINTEUR NOMVD(JGVD).MLMOTS POINTEUR MVD(JGVD).MCHPOI REAL*8 XVD(JGVD) CHARACTER*4 DISVD(KGVD) ENDSEGMENT SEGMENT TATRAV POINTEUR VVCOF(JLCOF).MCHEVA POINTEUR VCOF(JGCOF).MCHEVA POINTEUR IVD(JGVD).MCHAEL POINTEUR VD(JGVD).MCHEVA POINTEUR DVD(JGVD).MCHEVA POINTEUR FFVD(KGVD).MCHEVA POINTEUR DFFVD(KGVD).MCHEVA LOGICAL LVCOF(JGCOF) LOGICAL LVD(JGVD) LOGICAL LDVD(JGVD) LOGICAL LFFVD(KGVD) LOGICAL LDFFVD(KGVD) ENDSEGMENT SEGMENT TABMAT POINTEUR VMAT(NUMVDU,NUMVPR).MCHAEL ENDSEGMENT CENDINCLUDE SMPOUET * INTEGER IMPR,IRET * * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans prlin4' SEGACT TABVDC SEGACT TATRAV*MOD NUMVPR=TABVDC.VVARPR(/1) NUMVDU=TABVDC.VVARDU(/1) NUMDER=TABVDC.ILCPR(/1)-1 NUMOP=TABVDC.ILCPR(/2) JLCOF=TATRAV.VVCOF(/1) * Mises à zéro préalables JGCOF=TATRAV.LVCOF(/1) DO IJGCOF=1,JGCOF TATRAV.LVCOF(IJGCOF)=.FALSE. ENDDO JGVD=TATRAV.LVD(/1) DO IJGVD=1,JGVD TATRAV.LVD(IJGVD)=.FALSE. TATRAV.LDVD(IJGVD)=.FALSE. ENDDO KGVD=TATRAV.LFFVD(/1) DO IKGVD=1,KGVD TATRAV.LFFVD(IKGVD)=.FALSE. TATRAV.LDFFVD(IKGVD)=.FALSE. ENDDO * * Que va-t-on devoir calculer ? On le tagge a 1. * Parmi les coeffs DO IJLCOF=1,JLCOF POWCOF=TABVDC.VLCOF(IJLCOF) SEGACT POWCOF DO IPC=1,POWCOF.LECT(/1) IPOW=POWCOF.LECT(IPC) IF (IPOW.NE.0) THEN TATRAV.LVCOF(IPC)=.TRUE. ENDIF ENDDO SEGDES POWCOF ENDDO * Parmi les datas et leurs dérivées DO IJGCOF=1,JGCOF IF (TATRAV.LVCOF(IJGCOF).EQV..TRUE.) THEN MYCOMP=TABVDC.VCOMP(IJGCOF) LDAT =TABVDC.VLDAT(IJGCOF) SEGACT MYCOMP NDAT=MYCOMP.DERCOF(/1) SEGACT LDAT DO IDAT=1,NDAT LDER =MYCOMP.DERCOF(IDAT) IJGVD=LDAT.LECT(IDAT) * IKGVD=TABVDC.DJSVD(IJGVD) IF (LDER.EQ.0) THEN TATRAV.LVD(IJGVD)=.TRUE. * TATRAV.LFFVD(IKGVD)=.TRUE. ELSEIF (LDER.EQ.1) THEN TATRAV.LDVD(IJGVD)=.TRUE. * TATRAV.LDFFVD(IKGVD)=.TRUE. ELSEIF (LDER.EQ.2) THEN TATRAV.LVD(IJGVD)=.TRUE. * TATRAV.LFFVD(IKGVD)=.TRUE. TATRAV.LDVD(IJGVD)=.TRUE. * TATRAV.LDFFVD(IKGVD)=.TRUE. ELSE WRITE(IOIMP,*) 'Erreur grave 1' GOTO 9999 ENDIF ENDDO SEGDES LDAT SEGDES MYCOMP ENDIF ENDDO * Parmi les variables et leurs dérivées DO IOP=1,NUMOP DO IDER=0,NUMDER DO IVARPR=1,NUMVPR IILCPR=TABVDC.ILCPR(IDER+1,IOP,IVARPR) IF (IILCPR.NE.0) THEN IJGVD=TABVDC.VVARPR(IVARPR) IF (IDER.EQ.0) THEN TATRAV.LVD(IJGVD)=.TRUE. ELSE TATRAV.LDVD(IJGVD)=.TRUE. ENDIF ENDIF ENDDO DO IVARDU=1,NUMVDU IILCDU=TABVDC.ILCDU(IDER+1,IOP,IVARDU) IF (IILCDU.NE.0) THEN IJGVD=TABVDC.VVARDU(IVARDU) IF (IDER.EQ.0) THEN TATRAV.LVD(IJGVD)=.TRUE. ELSE TATRAV.LDVD(IJGVD)=.TRUE. ENDIF ENDIF ENDDO ENDDO ENDDO * Parmi les fonctions de forme DO IJGVD=1,JGVD IF (TATRAV.LVD(IJGVD).EQV..TRUE.) THEN IKGVD=TABVDC.DJSVD(IJGVD) TATRAV.LFFVD(IKGVD)=.TRUE. IF (TABVDC.MVD(IJGVD).EQ.0) THEN TATRAV.LVD(IJGVD)=.FALSE. ENDIF ENDIF IF (TATRAV.LDVD(IJGVD).EQV..TRUE.) THEN IKGVD=TABVDC.DJSVD(IJGVD) TATRAV.LDFFVD(IKGVD)=.TRUE. IF (TABVDC.MVD(IJGVD).EQ.0) THEN TATRAV.LDVD(IJGVD)=.FALSE. ENDIF ENDIF ENDDO * * Fin... * SEGDES,TATRAV SEGDES,TABVDC * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine prlin4' RETURN * * End of subroutine PRLIN4 * END