extfac
C EXTFAC SOURCE GOUNAND 24/11/06 21:15:09 12073 $ CGEOME,FACTIV, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : EXTFAC C DESCRIPTION : On extrait de CGEOM3 les éléments qui ont au moins une C face appartenant à CSGEO3 et un objet MELEME détourné C contenant les faces actives. C C C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : C APPELES (E/S) : C APPELES (BLAS) : C APPELES (CALCUL) : C APPELE PAR : C*********************************************************************** C SYNTAXE GIBIANE : C ENTREES : C ENTREES/SORTIES : C SORTIES : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 17/12/2002, version initiale C HISTORIQUE : v1, 17/12/2002, 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 SMCOORD -INC SMELEME POINTEUR CGEOM3.MELEME,SCGEO3.MELEME POINTEUR CSGEO3.MELEME,SCSGE3.MELEME POINTEUR CGEOME.MELEME,SCGEOM.MELEME POINTEUR FACVOL.MELEME,SFAVOL.MELEME INTEGER NBNN,NBELEM,NBSOUS,NBREF * Segment à moi SEGMENT VOLTIV POINTEUR IVOLTI(NBSOUV).SVOLTI ENDSEGMENT SEGMENT SVOLTI LOGICAL LVOLTI(NBELEV) ENDSEGMENT -INC TNLIN *-INC SFACTIV INTEGER NBSOUV,NBSOFV,NBELEV *-INC SMLLOGI POINTEUR KRSURF.MLLOGI INTEGER JG *-INC SIQUAF POINTEUR MYQRFS.IQUAFS POINTEUR IQUVOL.IQUAF POINTEUR IQUFAC.IQUAF * INTEGER IMPR,IRET * INTEGER NBSOUF,NBELEF INTEGER IBSOUF,IBELEF,IBSOUV,IBELEV INTEGER NBELFV,NBNNV,NBELVA INTEGER IBSOFV,IBELFV,IBNNV,IBELVA INTEGER NUCFAC,NGLFAC,NPLFAC,NPCFAC INTEGER ITYVOL,ITYFAC LOGICAL LFOUND * * Executable statements * IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans extfac.eso' * * On construit KRSURF : KRSURF(i) = VRAI si i est un numéro global * du centre d'un élément de CSGEO3 (point face) * JG=nbpts SEGINI,KRSURF SEGACT CSGEO3 NBSOUF=CSGEO3.LISOUS(/1) DO IBSOUF=1,NBSOUF SCSGE3=CSGEO3.LISOUS(IBSOUF) SEGACT SCSGE3 ITYFAC=SCSGE3.ITYPEL IF (IRET.NE.0) GOTO 9999 SEGACT IQUFAC NUCFAC=IQUFAC.NUCENT SEGDES IQUFAC NBELEF=SCSGE3.NUM(/2) DO IBELEF=1,NBELEF NGLFAC=SCSGE3.NUM(NUCFAC,IBELEF) KRSURF.LOGI(NGLFAC)=.TRUE. ENDDO SEGDES SCSGE3 ENDDO SEGDES CSGEO3 * segprt,krsurf * * On parcourt l'objet maillage CGEOM3 en notant les éléments ayant * au moins une face active LVOLTI(IBELEV)=.TRUE. * SEGACT CGEOM3 NBSOUV=CGEOM3.LISOUS(/1) SEGINI,VOLTIV DO IBSOUV=1,NBSOUV SCGEO3=CGEOM3.LISOUS(IBSOUV) SEGACT SCGEO3 NBELEV=SCGEO3.NUM(/2) SEGINI,SVOLTI ITYVOL=SCGEO3.ITYPEL IF (IRET.NE.0) GOTO 9999 SEGACT IQUVOL FACVOL=IQUVOL.LFACE SEGDES IQUVOL SEGACT FACVOL NBSOFV=FACVOL.LISOUS(/1) DO IBSOFV=1,NBSOFV SFAVOL=FACVOL.LISOUS(IBSOFV) * segprt,sfavol SEGACT SFAVOL ITYFAC=SFAVOL.ITYPEL IF (IRET.NE.0) GOTO 9999 SEGACT IQUFAC NUCFAC=IQUFAC.NUCENT SEGDES IQUFAC NBELFV=SFAVOL.NUM(/2) DO IBELEV=1,NBELEV LFOUND=.FALSE. DO IBELFV=1,NBELFV NPLFAC=SFAVOL.NUM(NUCFAC,IBELFV) NPCFAC=SCGEO3.NUM(NPLFAC,IBELEV) * Write(ioimp,*) 'nplfac=',nplfac,' npcfac=',npcfac LFOUND=LFOUND.OR.KRSURF.LOGI(NPCFAC) ENDDO SVOLTI.LVOLTI(IBELEV)=LFOUND.OR.SVOLTI.LVOLTI(IBELEV) ENDDO SEGDES,SFAVOL ENDDO SEGDES,SVOLTI * SEGPRT,SVOLTI VOLTIV.IVOLTI(IBSOUV)=SVOLTI SEGDES FACVOL SEGDES SCGEO3 ENDDO SEGDES VOLTIV SEGDES CGEOM3 * * On construit l'objet maillage CGEOME contenant uniquement * les éléments ayant au moins une face active * SEGACT CGEOM3 NBSOUV=CGEOM3.LISOUS(/1) NBNN=0 NBELEM=0 NBSOUS=NBSOUV NBREF=NBSOUV SEGINI CGEOME SEGACT VOLTIV IBSOV2=0 DO IBSOUV=1,NBSOUV SCGEO3=CGEOM3.LISOUS(IBSOUV) SEGACT SCGEO3 NBNNV=SCGEO3.NUM(/1) NBELEV=SCGEO3.NUM(/2) SVOLTI=VOLTIV.IVOLTI(IBSOUV) SEGACT SVOLTI * Trouver le nombre d'éléments actifs dans ce maillage élémentaire NBELVA=0 DO IBELEV=1,NBELEV IF (SVOLTI.LVOLTI(IBELEV)) THEN NBELVA=NBELVA+1 ENDIF ENDDO IF (NBELVA.GT.0) THEN NBNN=NBNNV NBELEM=NBELVA NBSOUS=0 NBREF=0 SEGINI,SCGEOM SCGEOM.ITYPEL=SCGEO3.ITYPEL IPT1=CGEOM3.LISREF(IBSOUV) IF (IPT1.NE.0) THEN SEGINI MELEME ENDIF IBELVA=0 DO IBELEV=1,NBELEV IF (SVOLTI.LVOLTI(IBELEV)) THEN IBELVA=IBELVA+1 DO IBNNV=1,NBNNV SCGEOM.NUM(IBNNV,IBELVA)=SCGEO3.NUM(IBNNV,IBELEV) IF (IPT1.NE.0) THEN NUM(IBNNV,IBELVA)=IPT1.NUM(IBNNV,IBELEV) ENDIF ENDDO ENDIF ENDDO SEGDES,SCGEOM IBSOV2=IBSOV2+1 CGEOME.LISOUS(IBSOV2)=SCGEOM IF (IPT1.NE.0) THEN SEGDES MELEME CGEOME.LISREF(IBSOV2)=MELEME ENDIF ENDIF *DEBUG SEGPRT,SVOLTI SEGSUP SVOLTI SEGDES SCGEO3 ENDDO *DEBUG SEGPRT,VOLTIV SEGSUP VOLTIV NBNN=0 NBELEM=0 NBSOUS=IBSOV2 NBREF=IBSOV2 SEGADJ,CGEOME SEGDES CGEOME SEGDES CGEOM3 *DEBUG CALL ECROBJ('MAILLAGE',CGEOME) *DEBUG CALL PRLIST *DEBUG CALL ECROBJ('MAILLAGE',CGEOM3) *DEBUG CALL PRLIST * * On parcourt l'objet maillage CGEOME en notant les faces actives des * éléments LFACTI(IBFAVO,IBELEV)=.TRUE. * SEGACT CGEOME NBSOUV=CGEOME.LISOUS(/1) SEGINI,FACTIV DO IBSOUV=1,NBSOUV SCGEOM=CGEOME.LISOUS(IBSOUV) SEGACT SCGEOM ITYVOL=SCGEOM.ITYPEL IF (IRET.NE.0) GOTO 9999 SEGACT IQUVOL FACVOL=IQUVOL.LFACE SEGDES IQUVOL SEGACT FACVOL NBSOFV=FACVOL.LISOUS(/1) SEGINI,SFACTI DO IBSOFV=1,NBSOFV SFAVOL=FACVOL.LISOUS(IBSOFV) SEGACT SFAVOL ITYFAC=SFAVOL.ITYPEL IF (IRET.NE.0) GOTO 9999 SEGACT IQUFAC NUCFAC=IQUFAC.NUCENT SEGDES IQUFAC NBELFV=SFAVOL.NUM(/2) NBELEV=SCGEOM.NUM(/2) SEGINI SSFACT DO IBELEV=1,NBELEV DO IBELFV=1,NBELFV NPLFAC=SFAVOL.NUM(NUCFAC,IBELFV) NPCFAC=SCGEOM.NUM(NPLFAC,IBELEV) SSFACT.LFACTI(IBELFV,IBELEV)=KRSURF.LOGI(NPCFAC) ENDDO ENDDO SEGDES SSFACT * SEGPRT,SSFACT SFACTI.ISFACT(IBSOFV)=SSFACT SEGDES SFAVOL ENDDO SEGDES SFACTI * SEGPRT,SFACTI FACTIV.IFACTI(IBSOUV)=SFACTI SEGDES FACVOL SEGDES SCGEOM ENDDO SEGDES FACTIV * SEGPRT,FACTIV SEGDES CGEOME SEGSUP,KRSURF * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine extfac' RETURN * * End of subroutine EXTFAC * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales