C DCOGAU SOURCE GOUNAND 07/07/05 21:15:19 5784 SUBROUTINE DCOGAU(JCOEFF,JDFFPG, $ JDCOFG, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : DCOGAU C PROJET : Noyau linéaire NLIN C DESCRIPTION : Calcul du coefficient aux points de Gauss d'un élément C de référence pour chaque élément réel. C Le coefficient peut être scalaire, vectoriel ou C tensoriel. Les fonctions d'interpolation seront les C mêmes pour chaque composante du vecteur ou chaque C coefficient des matrices. C Les valeurs nodales devront être exprimées par rapport C aux coordonnées de l'espace de référence (par exemple, C s'il y a des dérivées, elles devront être exprimées par C rapport à ksi, eta...) C Si les valeurs sont des variables généralisées, il n'y C a peut-être rien à faire. (?) 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 : PRCHVA (impression d'un segment de type MCHEVA) C DCOGA1 (calcul de JDCOFG (fortran 77)) C APPELE PAR : NLIN C*********************************************************************** C ENTREES : C ENTREES/SORTIES : - C SORTIES : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v3.1, 30/07/04, possiblité de travailler C dans l'espace de référence C VERSION : v1, 26/08/03, version initiale C HISTORIQUE : v1, 26/08/03, 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 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 NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM POINTEUR JCOEFF.MCHEVA POINTEUR JDCOFG.MCHEVA * Valeurs des fns d'interpolation du coeff. aux points de Gauss POINTEUR JDFFPG.MCHEVA * INTEGER IMPR,IRET * INTEGER NDLIG,NDCOL,N2DLIG,N2DCOL,NDNOEU,NLDF,NLCO INTEGER NDDL,IESREL,NBPOGO,NBELEM * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans dcogau' * IESREL=IDIM SEGACT JDFFPG NDLIG=JDFFPG.VELCHE(/1) NDCOL=JDFFPG.VELCHE(/2) N2DLIG=JDFFPG.VELCHE(/3) IESP=JDFFPG.VELCHE(/4) NDNOEU=JDFFPG.VELCHE(/5) NLDF =JDFFPG.VELCHE(/6) * Correction pour l'option 'EREF', les gradients sont alors * dans l'espace de référence * IF (NDLIG.NE.1.OR.N2DLIG.NE.1.OR.N2DCOL.NE.IESREL) THEN IF (NDLIG.NE.1.OR.N2DLIG.NE.1) THEN WRITE(IOIMP,*) 'Erreur dims JDFFPG' GOTO 9999 ENDIF NDDL=NDCOL NBPOGO=NDNOEU * NBELEM=NDELM SEGACT JCOEFF NDLIG=JCOEFF.VELCHE(/1) NDCOL=JCOEFF.VELCHE(/2) N2DLIG=JCOEFF.VELCHE(/3) N2DCOL=JCOEFF.VELCHE(/4) NDNOEU=JCOEFF.VELCHE(/5) NLCO =JCOEFF.VELCHE(/6) IF (NDLIG.NE.1.OR.N2DLIG.NE.1.OR.N2DCOL.NE.1.OR.NDNOEU.NE.1) THEN * $ .OR.NDELM.NE.NBELEM) THEN WRITE(IOIMP,*) 'Erreur dims JCOEFF' GOTO 9999 ENDIF NBELEM=MAX(NLDF,NLCO) IF (NLDF.NE.1.AND.NLDF.NE.NBELEM) THEN WRITE(IOIMP,*) 'Erreur nb. elem. JDFFPG' GOTO 9999 ENDIF IF (NLCO.NE.1.AND.NLCO.NE.NBELEM) THEN WRITE(IOIMP,*) 'Erreur nb. elem. JCOEFF' GOTO 9999 ENDIF * * Initialisations... * NBLIG=1 NBCOL=1 N2LIG=1 N2COL=IESP NBPOI=NBPOGO NBELM=NBELEM SEGINI JDCOFG * * On effectue le calcul du coefficient aux points de Gauss * CALL DCOGA1(NDDL,IESP,NBPOGO,NLDF,NLCO,NBELEM, $ JCOEFF.VELCHE,JDFFPG.VELCHE, $ JDCOFG.VELCHE, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SEGDES JDCOFG SEGDES JCOEFF SEGDES JDFFPG IF (IMPR.GT.3) THEN WRITE(IOIMP,*) 'On a créé', $ ' JDCOFG(élément , poi.gauss ,', $ ' dim.esp.rel ,1,1,1)' CALL PRCHVA(JDCOFG,IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ENDIF * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine dcogau' RETURN * * End of subroutine DCOGAU * END