C NLIA SOURCE CHAT 07/10/29 21:24:57 5940 SUBROUTINE NLIA(CGEOME,FACTIV,TABGEO,TABVDC,TATRAV, $ METING,LAXI,LERF,LERJ, $ MYFALS,MYPGS,MYFPGS,MYQRFS, $ TABMAT, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : NLIA C DESCRIPTION : Création d'une matrice intégration des termes de surface 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 ENTREES/SORTIES : - C SORTIES : C TRAVAIL : * SOUGEO (type MELEME) : maillage élémentaire. C * MLLRFS (type MLLRFS) : pointeurs sur les C éléments de référence associés aux 4 espaces de C discrétisation (géométrie, coefficient, primal, C dual) sur le maillage élémentaire. C * PGCOUR (type POGAU) : méthode d'intégration C courante. C * JCOOR (type MCHEVA) : valeurs du champ ICOOR C sur le maillage élémentaire. C Structure (cf.include SMCHAEL) : C (1, nb. ddl, 1, dim. esp. réel, C 1, nb. éléments) C * JCOEFF (type MCHEVA) : valeurs du champ ICOEFF C sur le maillage élémentaire. C Structure (cf.include SMCHAEL) : C (1, nb. ddl, nb. comp. duales, C nb. comp. primales, 1, nb. éléments) C * JMTLIA (type MCHEVA) : valeurs du champ IMTLIA C sur le maillage élémentaire. C Structure (cf.include SMCHAEL) : C (nb. ddl dual, nb. ddl primal, C nb. comp. duales, nb. comp. primales, C 1, nb. éléments) C nb. ddl primal=1 si la matrice est condensée. C * JMAJAC (type MCHEVA) : valeurs de la matrice C jacobienne aux points de Gauss sur le maillage C élémentaire. C Structure (cf.include SMCHAEL) : C (1, 1, dim. esp. réel, dim. esp. référence, C nb. poi. gauss, nb. éléments) C * JMIJAC (type MCHEVA) : valeurs de l'inverse de C la matrice jacobienne aux points de Gauss sur C le maillage élémentaire. C Structure (cf.include SMCHAEL) : C (1, 1, dim. esp. référence, dim. esp. réel, C nb. poi. gauss, nb. éléments) C JMIJAC n'existe que si dim.esp.réf=dim.esp.réel C * JDTJAC (type MCHEVA) : valeurs du déterminant C de la matrice jacobienne aux points de Gauss C sur le maillage élémentaire. C Structure (cf.include SMCHAEL) : C (1, 1, 1, 1, nb. poi. gauss, nb. éléments) C Si la matrice jacobienne n'est pas carrée, on C a calculé sqrt(det(trans(J).J)) C * JCOEFG (type MCHEVA) : valeurs du coefficient C tensoriel aux points de Gauss sur le maillage C élémentaire. C Structure (cf.include SMCHAEL) : C (1, 1, nb. comp. duales, nb. comp. primales, C nb. poi. gauss, nb. éléments) C * FFPG (type MCHEVA) : valeurs des fonctions C d'interpolation aux points de gauss sur C l'élément de référence. C Structure (cf.include SMCHAEL) : C (1, nb. ddl, 1, 1, nb. poi. gauss, 1) C * DFFPG (type MCHEVA) : valeurs des dérivées C premières des fonctions d'interpolation aux C points de gauss sur l'élément de référence. C Structure (cf.include SMCHAEL) : C (1, nb. ddl, 1, dim.esp.réf, nb. poi. gauss, 1) C * JDFFPG (type MCHEVA) : valeurs des dérivées C premières des fonctions d'interpolation C primales aux points de gauss sur l'élément C réel. C Structure (cf.include SMCHAEL) : C (1, nb. ddl, 1, dim.esp.réel, nb. poi. gauss, C nb. élém.) C * JDFFDG (type MCHEVA) : valeurs des dérivées C premières des fonctions d'interpolation C duales aux points de gauss sur l'élément réel. C Structure (cf.include SMCHAEL) : C (1, nb. ddl, 1, dim.esp.réel, nb. poi. gauss, C nb. élém.) C*********************************************************************** C VERSION : v4, 26/07/06, refonte sur le modele du nlin evolue C VERSION : v3, 11/05/04, refonte (ajout comportement) C VERSION : v2, 22/09/03, refonte complète (modif SMPOUET) C VERSION : v1, 22/08/2003, version initiale C HISTORIQUE : v1, 22/08/2003, création C HISTORIQUE : 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 -INC CCGEOME CBEGININCLUDE SELREF SEGMENT ELREF CHARACTER*(LNNOM) NOMLRF CHARACTER*(LNFORM) FORME CHARACTER*(LNTYPL) TYPEL CHARACTER*(LNESP) ESPACE INTEGER DEGRE REAL*8 XCONOD(NDIMEL,NBNOD) INTEGER NPQUAF(NBDDL) INTEGER NUMCMP(NBDDL) INTEGER QUENOD(NBDDL) INTEGER ORDDER(NDIMEL,NBDDL) POINTEUR MBPOLY.POLYNS ENDSEGMENT SEGMENT ELREFS POINTEUR LISEL(0).ELREF ENDSEGMENT CENDINCLUDE SELREF POINTEUR LRFVOL.ELREF CBEGININCLUDE SFALRF SEGMENT FALRF CHARACTER*(LNNFA) NOMFA INTEGER NUQUAF(NBLRF) POINTEUR ELEMF(NBLRF).ELREF ENDSEGMENT SEGMENT FALRFS POINTEUR LISFA(0).FALRF ENDSEGMENT CENDINCLUDE SFALRF POINTEUR MYFALS.FALRFS CBEGININCLUDE SPOGAU SEGMENT POGAU CHARACTER*(LNNPG) NOMPG CHARACTER*(LNTPG) TYPMPG CHARACTER*(LNFPG) FORLPG INTEGER NORDPG REAL*8 XCOPG(NDLPG,NBPG) REAL*8 XPOPG(NBPG) ENDSEGMENT SEGMENT POGAUS POINTEUR LISPG(0).POGAU ENDSEGMENT CENDINCLUDE SPOGAU POINTEUR MYPGS.POGAUS CBEGININCLUDE SFAPG SEGMENT FAPG CHARACTER*(LNNFAP) NOMFAP INTEGER NBQUAF(NBMPG) POINTEUR MPOGAU(NBMPG).POGAU ENDSEGMENT SEGMENT FAPGS POINTEUR LISFPG(0).FAPG ENDSEGMENT CENDINCLUDE SFAPG POINTEUR MYFPGS.FAPGS CBEGININCLUDE SLCOMP SEGMENT COMP CHARACTER*8 NOMCOM INTEGER DERCOF(NCOCOF) LOGICAL LTREF ENDSEGMENT SEGMENT COMPS POINTEUR LISCOM(NBCOMP).COMP ENDSEGMENT CENDINCLUDE SLCOMP POINTEUR MYCOM.COMP POINTEUR IVCOMP.COMP POINTEUR IVCOMD.COMP -INC SMLENTI POINTEUR IPOWCO.MLENTI -INC SMELEME POINTEUR CGEOME.MELEME POINTEUR SOUGEO.MELEME POINTEUR FACVOL.MELEME POINTEUR SFAVOL.MELEME * CBEGININCLUDE SMCHAEL SEGMENT MCHAEL POINTEUR IMACHE(N1).MELEME POINTEUR ICHEVA(N1).MCHEVA ENDSEGMENT SEGMENT MCHEVA REAL*8 VELCHE(NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM) ENDSEGMENT SEGMENT LCHEVA POINTEUR LISCHE(NBCHE).MCHEVA ENDSEGMENT CENDINCLUDE SMCHAEL INTEGER N1 POINTEUR ICOOR.MCHAEL POINTEUR MYMCHA.MCHAEL POINTEUR JXCOPG.MCHEVA POINTEUR JXPOPG.MCHEVA POINTEUR JCOOR.MCHEVA,JCOEFF.MCHEVA,JCOEFG.MCHEVA POINTEUR JDCOFG.MCHEVA POINTEUR JMAJAC.MCHEVA,JMIJAC.MCHEVA,JDTJAC.MCHEVA POINTEUR JMAJA2.MCHEVA,JMIJA2.MCHEVA,JDTJA2.MCHEVA POINTEUR JDTJA3.MCHEVA POINTEUR IPROCO.MCHEVA POINTEUR FC.MCHEVA POINTEUR FFPG.MCHEVA,DFFPG.MCHEVA,JDFFPG.MCHEVA POINTEUR FVPR.MCHEVA,FVDU.MCHEVA POINTEUR FCPR.MCHEVA,FCDU.MCHEVA POINTEUR JMTLIA.MCHEVA 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 NUMVPR,NUMVDU,NUMDER,NUMOP INTEGER JGVC,KGVC CBEGININCLUDE SFACTIV SEGMENT FACTIV POINTEUR IFACTI(NBSOUV).SFACTI ENDSEGMENT SEGMENT SFACTI POINTEUR ISFACT(NBSOFV).SSFACT ENDSEGMENT SEGMENT SSFACT LOGICAL LFACTI(NBELFV,NBELEV) ENDSEGMENT CENDINCLUDE SFACTIV CBEGININCLUDE SIQUAF SEGMENT IQUAF INTEGER NUMQUF REAL*8 XCONQR(NDIMQR,NBNOQR) INTEGER NUCENT POINTEUR LFACE.MELEME ENDSEGMENT SEGMENT IQUAFS POINTEUR LISQRF(NBQRF).IQUAF ENDSEGMENT CENDINCLUDE SIQUAF POINTEUR MYQRFS.IQUAFS POINTEUR IQUVOL.IQUAF POINTEUR IQUFAC.IQUAF * CHARACTER*4 METING INTEGER LAXI INTEGER LERF LOGICAL LERJ,LERJ2 INTEGER IMPR,IRET * CHARACTER*4 MYDISC * INTEGER NBELEF,NBELFV,NBELEV,NBSOFV,NBSOUV INTEGER IBELEF,IBELFV,IBELEV,IBSOFV,IBSOUV INTEGER IJVC,IKVC INTEGER IVARPR,IVARDU,KDERPR,KDERDU,IOP INTEGER ITYVOL,NBELEM LOGICAL LF,LDF,LC,LDC LOGICAL MVVPR,MVVDU,LVID * * Executable statements * * IMPR=0 IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans nlia' * Activation et intialisation des chapeaux SEGACT CGEOME SEGACT FACTIV SEGACT TABGEO SEGACT TABVDC SEGACT TATRAV*MOD NBSOUV=CGEOME.LISOUS(/1) NUMVPR=TABVDC.VVARPR(/1) NUMVDU=TABVDC.VVARDU(/1) JLCOF=TABVDC.VLCOF(/1) JGCOF=TABVDC.VCOMP(/1) JGVD=TABVDC.DJSVD(/1) KGVD=TABVDC.DISVD(/2) NUMDER=TABVDC.ILCPR(/1)-1 NUMOP=TABVDC.ILCPR(/2) * N1=NBSOUV * NUMVPR et NUMVDU initialisés ci-dessus SEGINI TABMAT * Cette instruction n'a pas l'air de fonctionner * SEGINI TABMAT.VMAT(*) DO IVARPR=1,NUMVPR DO IVARDU=1,NUMVDU SEGINI,MYMCHA TABMAT.VMAT(IVARDU,IVARPR)=MYMCHA ENDDO ENDDO SEGACT MYPGS ICOOR=TABGEO.IGEO SEGACT ICOOR * SEGACT TABVC.NOMVC(*) DO IJVD=1,JGVD MYMCHA=TATRAV.IVD(IJVD) IF (MYMCHA.NE.0) THEN SEGACT MYMCHA ENDIF ENDDO * * On travaille sur chaque sous-domaine * DO 1 IBSOUV=1,NBSOUV SOUGEO=CGEOME.LISOUS(IBSOUV) SEGACT SOUGEO SFACTI=FACTIV.IFACTI(IBSOUV) SEGACT,SFACTI * NBELEV=SOUGEO.NUM(/2) ITYVOL=SOUGEO.ITYPEL * Détermination de la dimension de l'espace de référence CALL DIMELE(NOMS(ITYVOL),IESREF,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * CALL FIQUAF(ITYVOL,MYQRFS,IQUVOL,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * SEGACT IQUVOL FACVOL=IQUVOL.LFACE SEGDES IQUVOL SEGACT FACVOL NBSOFV=FACVOL.LISOUS(/1) * * On travaille sur chaque type de face pour chaque sous-domaine * DO 12 IBSOFV=1,NBSOFV SFAVOL=FACVOL.LISOUS(IBSOFV) SEGACT SFAVOL NBELFV=SFAVOL.NUM(/2) ITYFAC=SFAVOL.ITYPEL CALL FIQUAF(ITYFAC,MYQRFS,IQUFAC,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SSFACT=SFACTI.ISFACT(IBSOFV) * On calcule le nb de face pour un type de face d'un sous-domaine SEGACT SSFACT IBELEF=0 DO IBELEV=1,NBELEV DO IBELFV=1,NBELFV IF (SSFACT.LFACTI(IBELFV,IBELEV)) THEN IBELEF=IBELEF+1 ENDIF ENDDO ENDDO SEGDES SSFACT NBELEF=IBELEF * * Celui-ci peut être nul : Cas des prismes où on ne calcule des intégrales * de surface que sur les triangles * IF (NBELEF.EQ.0) GOTO 12 * Création des segments contenant les poids et points de Gauss sur * toutes les faces de l'élément de référence. * In CREPG : SEGINI JXCOPG * In CREPG : SEGINI JXPOPG CALL CREPG(IQUVOL,SFAVOL,METING,MYFALS,MYFPGS, $ JXCOPG,JXPOPG, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Géométrie * MYDISC=TABGEO.DISGEO CALL KEEF(ITYVOL,MYDISC, $ MYFALS, $ LRFVOL, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * In KFNRFF : SEGINI FFPG * In KFNRFF : SEGINI DFFPG CALL KFNRFF(LRFVOL,JXCOPG, $ FFPG,DFFPG, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Création des matrices jacobiennes et déterminants * pour la transformation : élément volumique de référence <-> * élément volumique réel * Ici, on ne se servira que de l'inverse de la matrice * jacobienne. * In GEOLIF : SEGINI JMAJAC * In GEOLIF : SEGINI JMIJAC * In GEOLIF : SEGINI JDTJAC JCOOR=ICOOR.ICHEVA(IBSOUV) CALL GEOLIF(DFFPG,JCOOR,SSFACT,NBELEF, $ JMAJAC,JMIJAC,JDTJAC,LERJ, $ IMPR,IRET) IF (IRET.NE.0) THEN IF (LERJ) GOTO 9666 GOTO 9999 ENDIF SEGSUP DFFPG *! SEG SUP JMA JAC *! SEG SUP JDT JAC * * Création des matrices jacobiennes et déterminants * pour la transformation : élément surfacique de référence <-> * élément surfacique réel * Ici, on ne se servira que du déterminant de la matrice jacobienne. * In GEOLF2 : SEGINI JMAJA2 * In GEOLF2 : SEGINI JMIJA2 * In GEOLF2 : SEGINI JDTJA2 MYDISC=TABGEO.DISGEO CALL GEOLF2(LRFVOL,IQUVOL,SFAVOL, $ MYDISC,METING,MYFALS,MYFPGS, $ JCOOR,SSFACT,NBELEF, $ JMAJA2,JMIJA2,JDTJA2,LERJ2, $ IMPR,IRET) IF (IRET.NE.0) THEN IF (LERJ2) THEN LERJ=LERJ2 GOTO 9666 ENDIF GOTO 9999 ENDIF IF (IRET.NE.0) GOTO 9999 SEGSUP JMAJA2 IF (JMIJA2.NE.0) THEN SEGSUP JMIJA2 ENDIF SEGSUP FFPG C Inutile normalement, on peut se débrouiller avec les coeffs C* En axi, on multiplie le determinant de la matrice C* jacobienne par 2piR (ou R est la premiere coordonnee) C IF (LAXI.GT.0) THEN C* In GEOMFT : SEGINI JDTJA3 C CALL GEOMFT(JCOOR,FFPG,SSFACT,NBELEF, C $ JDTJA2,LAXI, C $ JDTJA3, C $ IMPR,IRET) C IF (IRET.NE.0) GOTO 9999 C SEGSUP JDTJA2 C JDTJA2=JDTJA3 C ENDIF * * Attention : modif par rapport à nlin ! * JPC=0 JMAREG=0 JDIAMA=0 METRIQ=0 * * Calcul des fonctions de forme et de leurs dérivées * DO IKVD=1,KGVD LF=TATRAV.LFFVD(IKVD).EQV..TRUE. LDF=TATRAV.LDFFVD(IKVD).EQV..TRUE. IF (LF.OR.LDF) THEN MYDISC=TABVDC.DISVD(IKVD) CALL KEEF(ITYVOL,MYDISC, $ MYFALS, $ LRFVOL, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * In KFNRFF : SEGINI FFPG * In KFNRFF : SEGINI DFFPG CALL KFNRFF(LRFVOL,JXCOPG, $ FFPG,DFFPG, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (LF) THEN TATRAV.FFVD(IKVD)=FFPG ELSE * segini ffpg SEGSUP FFPG ENDIF IF (LDF) THEN IF (LERF.NE.0) THEN SEGINI,JDFFPG=DFFPG SEGDES JDFFPG ELSE * In DFNFRF : SEGINI JDFFPG CALL DFNFRF(DFFPG,JMIJAC,SSFACT,NBELEF, $ JDFFPG, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ENDIF TATRAV.DFFVD(IKVD)=JDFFPG ENDIF SEGSUP DFFPG ENDIF ENDDO * * Calcul des champs et de leurs dérivées * DO IJVD=1,JGVD LC=TATRAV.LVD(IJVD).EQV..TRUE. LDC=TATRAV.LDVD(IJVD).EQV..TRUE. IF (LC.OR.LDC) THEN MYMCHA=TATRAV.IVD(IJVD) JCOEFF=MYMCHA.ICHEVA(IBSOUV) IF (LC) THEN FFPG=TATRAV.FFVD(TABVDC.DJSVD(IJVD)) * In COGAUF : SEGINI JCOEFG CALL COGAUF(JCOEFF,FFPG,SSFACT,NBELEF, $ JCOEFG, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 TATRAV.VD(IJVD)=JCOEFG ENDIF IF (LDC) THEN JDFFPG=TATRAV.DFFVD(TABVDC.DJSVD(IJVD)) * In DCOGAF : SEGINI JDCOFG CALL DCOGAF(JCOEFF,JDFFPG,SSFACT,NBELEF, $ JDCOFG, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 TATRAV.DVD(IJVD)=JDCOFG ENDIF ENDIF ENDDO *!!! SEG DES JMIJAC * * Calcul des coefficients * DO IJGCOF=1,JGCOF LC=TATRAV.LVCOF(IJGCOF).EQV..TRUE. IF (LC) THEN IVCOMP=TABVDC.VCOMP(IJGCOF) IICOMP=TABVDC.VLDAT(IJGCOF) * In CALCGA : SEGINI FC * In CALCGA : SEG INI METRIQ.MCHEVA CALL CALCGA(IVCOMP,IICOMP,JMAJAC,JMIJAC,JDTJAC, $ JMAREG,JDIAMA,JPC,METRIQ, $ TATRAV, $ FC,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 TATRAV.VCOF(IJGCOF)=FC ENDIF ENDDO * * Calcul des produits de coefficients * DO IJLCOF=1,JLCOF IPOWCO=TABVDC.VLCOF(IJLCOF) * In CALPCO : SEGINI IPROCO CALL CALPCO(IPOWCO,TATRAV, $ IPROCO,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 TATRAV.VVCOF(IJLCOF)=IPROCO ENDDO * * On peut faire le ménage dans les coefficients * DO IJGCOF=1,JGCOF FC=TATRAV.VCOF(IJGCOF) IF (FC.NE.0) THEN SEGSUP,FC TATRAV.VCOF(IJGCOF)=0 ENDIF ENDDO * * On effectue le calcul de la matrice * DO IVARPR=1,NUMVPR DO IVARDU=1,NUMVDU *Bug mis en evidence par toimp_3d JMTLIA=0 MYMCHA=TABMAT.VMAT(IVARDU,IVARPR) JMTLIA=MYMCHA.ICHEVA(IBSOUV) IJVARP=TABVDC.VVARPR(IVARPR) IJVARD=TABVDC.VVARDU(IVARDU) IKVARP=TABVDC.DJSVD(IJVARP) IKVARD=TABVDC.DJSVD(IJVARD) MVVPR=(TABVDC.MVD(IJVARP).NE.0) MVVDU=(TABVDC.MVD(IJVARD).NE.0) DO IOP=1,NUMOP DO KDERPR=0,NUMDER IJLCPR=TABVDC.ILCPR(KDERPR+1,IOP,IVARPR) IF (IJLCPR.NE.0) THEN FCPR=TATRAV.VVCOF(IJLCPR) * variable primale IF (KDERPR.EQ.0) THEN IF (MVVPR) THEN FVPR=TATRAV.VD(IJVARP) ELSE FVPR=TATRAV.FFVD(IKVARP) ENDIF ELSE IF (MVVPR) THEN FVPR=TATRAV.DVD(IJVARP) ELSE FVPR=TATRAV.DFFVD(IKVARP) ENDIF ENDIF DO KDERDU=0,NUMDER IJLCDU=TABVDC.ILCDU(KDERDU+1,IOP,IVARDU) IF (IJLCDU.NE.0) THEN FCDU=TATRAV.VVCOF(IJLCDU) * Variable duale IF (KDERDU.EQ.0) THEN IF (MVVDU) THEN FVDU=TATRAV.VD(IJVARD) ELSE FVDU=TATRAV.FFVD(IKVARD) ENDIF ELSE IF (MVVDU) THEN FVDU=TATRAV.DVD(IJVARD) ELSE FVDU=TATRAV.DFFVD(IKVARD) ENDIF ENDIF * WRITE(IOIMP,*) 'FVPR=',FVPR * WRITE(IOIMP,*) 'FVDU=',FVDU * WRITE(IOIMP,*) 'FCPR=',FCPR * WRITE(IOIMP,*) 'FCDU=',FCDU * WRITE(IOIMP,*) 'KDERPR=',KDERPR * WRITE(IOIMP,*) 'KDERDU=',KDERDU * WRITE(IOIMP,*) 'LDERPR=',LDERPR * WRITE(IOIMP,*) 'LDERDU=',LDERDU * SEGPRT,JXPOPG * SEGPRT,FVPR * SEGPRT,FVDU * SEGPRT,FCPR * SEGPRT,FCDU * SEGPRT,JDTJA2 * WRITE(IOIMP,*) 'KDERPR=',KDERPR * WRITE(IOIMP,*) 'KDERDU=',KDERDU C WRITE(IOIMP,*) 'LDERPR=',LDERPR C WRITE(IOIMP,*) 'LDERDU=',LDERDU C SEGPRT,JDTJA2 C WRITE(IOIMP,*) 'NBELEF=',NBELEF CALL LIALIN(JXPOPG, $ FVPR,FVDU,FCPR,FCDU, $ KDERPR,KDERDU, $ JDTJA2,SSFACT,NBELEF,LERF,IESREF, $ JMTLIA, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 C WRITE(IOIMP,*) 'JMTLIA=',JMTLIA C SEGPRT,JMTLIA C* STOP 16 ENDIF ENDDO ENDIF ENDDO ENDDO MYMCHA=TABMAT.VMAT(IVARDU,IVARPR) MYMCHA.IMACHE(IBSOUV)=SOUGEO MYMCHA.ICHEVA(IBSOUV)=JMTLIA * IF (JMTLIA.NE.0) THEN * SEGPRT,JMTLIA * ENDIF C WRITE(IOIMP,*) 'IVARPR=',IVARPR C WRITE(IOIMP,*) 'IVARDU=',IVARDU C WRITE(IOIMP,*) 'JMTLIA=',JMTLIA ENDDO ENDDO * Suppression de tous les MCHEVA DO IJLCOF=1,JLCOF IPROCO=TATRAV.VVCOF(IJLCOF) SEGSUP IPROCO TATRAV.VVCOF(IJLCOF)=IPROCO ENDDO * DO IJVD=1,JGVD JCOEFG=TATRAV.VD(IJVD) IF (JCOEFG.NE.0) THEN SEGSUP JCOEFG TATRAV.VD(IJVD)=JCOEFG ENDIF JDCOFG=TATRAV.DVD(IJVD) IF (JDCOFG.NE.0) THEN SEGSUP JDCOFG TATRAV.DVD(IJVD)=JDCOFG ENDIF ENDDO * DO IKVD=1,KGVD FFPG=TATRAV.FFVD(IKVD) IF (FFPG.NE.0) THEN SEGSUP FFPG TATRAV.FFVD(IKVD)=FFPG ENDIF JDFFPG=TATRAV.DFFVD(IKVD) IF (JDFFPG.NE.0) THEN SEGSUP JDFFPG TATRAV.DFFVD(IKVD)=JDFFPG ENDIF ENDDO * SEGSUP JDTJA2 SEGSUP JXPOPG SEGSUP JXCOPG SEGDES SFAVOL SEGSUP JDTJAC SEGSUP JMAJAC SEGSUP JMIJAC 12 CONTINUE * SEGPRT,JMTLIA SEGDES FACVOL SEGDES SFACTI SEGDES SOUGEO 1 CONTINUE * DO IJVD=1,JGVD MYMCHA=TATRAV.IVD(IJVD) IF (MYMCHA.NE.0) THEN SEGDES MYMCHA ENDIF ENDDO * SEGDES TABVC.NOMVC(*) SEGDES ICOOR SEGDES MYPGS * Cette instruction n'a pas l'air de fonctionner * Un peu de ménage là où il n'y a pas d'info * SEGDES TABMAT.VMAT(*) DO IVARPR=1,NUMVPR DO IVARDU=1,NUMVDU MYMCHA=TABMAT.VMAT(IVARDU,IVARPR) SEGACT MYMCHA LVID=.TRUE. DO ISOUS=1,NBSOUV MCHEVA=MYMCHA.ICHEVA(ISOUS) LVID=LVID.AND.(MCHEVA.EQ.0) ENDDO IF (LVID) THEN SEGSUP MYMCHA TABMAT.VMAT(IVARDU,IVARPR)=0 ELSE SEGDES,MYMCHA ENDIF ENDDO ENDDO SEGDES TATRAV SEGDES TABMAT SEGDES TABVDC SEGDES TABGEO SEGDES FACTIV SEGDES CGEOME * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9666 CONTINUE IRET=666 RETURN 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine nlia' RETURN * * End of subroutine nlia * END