nif
C NIF SOURCE FANDEUR 22/05/02 21:15:27 11359 $ FNPG,DFNPG, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : NIF C PROJET : Noyau linéaire NLIN C DESCRIPTION : Calcul des valeurs des fonctions de forme et des C valeurs de leurs dérivées premières aux points de Gauss. C C On utilise la relation (produit) suivante : C C < Ni (point) > = < Pi (point) > [Pn]^{-1} C C avec (cf. CALPN) : C [PN] = ( P1(ksi1) ..... Pn(ksi1)) C ( ... ..... ... ) C ( P1(ksin) ..... Pn(ksin)) C n = nb. ddl sur l'élément (NDFN) C ksii = coords. du ieme noeud d'approximation C dans l'espace de référence (de dimension C NDIML) C Pi = ieme polynome d'interpolation sur C l'élément de référence. C Ni = ieme fonction nodale d'interpolation sur C l'élément de référence. C point= point quelconque sur l'élément de référence C (donc en particulier les points de Gauss) C LANGAGE : Esope C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : VALPOL, NOMINC C APPELE PAR : KFNREF C*********************************************************************** C ENTREES : LRFVOL, MYPG, PNM1 C ENTREES/SORTIES : - C SORTIES : FNPG, DFNPG C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 16/09/99, version initiale C HISTORIQUE : v1, 16/09/99, création C HISTORIQUE : v2, 10/05/00, modif. du segment ELREF 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 SELREF POINTEUR LRFVOL.ELREF *-INC SPOLYNO POINTEUR MYBPOL.POLYNS POINTEUR MYPOLY.POLYNO -INC TMXMAT POINTEUR PNM1.MXMAT -INC SMLENTI INTEGER JG POINTEUR ORDER1.MLENTI -INC SMLREEL POINTEUR VECTPI.MLREEL *-INC SMCHAEL POINTEUR JXCOPG.MCHEVA INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM POINTEUR FNPG.MCHEVA POINTEUR DFNPG.MCHEVA * INTEGER IMPR,IRET * * Fonction Blas (produit scalaire) * EXTERNAL DDOT * INTEGER NBMONO INTEGER NDIMQR, NPGFAC,NBFN,NBELFV INTEGER IDIMQR,JDIMQR,IPGFAC,IBFN,IBELFV * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans nif' * * Initialisations * * SEGPRT,JXCOPG * SEGPRT,LRFVOL * SEGPRT,PNM1 SEGACT JXCOPG NDIMQR=JXCOPG.WELCHE(/4) NPGFAC=JXCOPG.WELCHE(/5) NBELFV=JXCOPG.WELCHE(/6) SEGACT LRFVOL MYBPOL=LRFVOL.MBPOLY SEGDES LRFVOL SEGACT MYBPOL SEGACT MYBPOL.LIPOLY(*) NBFN=MYBPOL.LIPOLY(/1) SEGACT PNM1 JG=NDIMQR SEGINI ORDER1 JG=NBFN SEGINI VECTPI * * On calcule les valeurs des fonctions de forme aux points de Gauss * NBLIG=1 NBCOL=NBFN N2LIG=1 N2COL=1 NBPOI=NPGFAC NBELM=NBELFV SEGINI FNPG DO 1 IDIMQR=1,NDIMQR ORDER1.LECT(IDIMQR)=0 1 CONTINUE DO IBELFV=1,NBELFV DO 3 IPGFAC=1,NPGFAC * Calcul de < P (pg) > = < P1(pg) ... Pnbfn(pg) > où pg est le * IPGFACieme point de Gauss DO 32 IBFN=1,NBFN MYPOLY=MYBPOL.LIPOLY(IBFN) NBMONO=MYPOLY.EXPMON(/2) $ JXCOPG.WELCHE(1,1,1,1,IPGFAC,IBELFV), $ MYPOLY.COEMON,MYPOLY.EXPMON, $ ORDER1.LECT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 32 CONTINUE * On calcule : < N (pg) > = < P (pg) > [Pn]^{-1} DO 34 IBFN=1,NBFN FNPG.WELCHE(1,IBFN,1,1,IPGFAC,IBELFV)= 34 CONTINUE 3 CONTINUE IF (IMPR.GT.3) THEN WRITE(IOIMP,*) 'Face n° ',IBELFV WRITE(IOIMP,*) 'Ordre de dérivation / coordonnée de réf. :' WRITE(IOIMP,4003) (ORDER1.LECT(IDIMQR),IDIMQR=1,NDIMQR) DO 5 IPGFAC=1,NPGFAC WRITE(IOIMP,*) 'Noeud de coordonnées :' WRITE(IOIMP,4004) $ (JXCOPG.WELCHE(1,1,1,IDIMQR,IPGFAC,IBELFV),IDIMQR=1 $ ,NDIMQR) WRITE(IOIMP,*) 'FNPG.WELCHE(nb.fns.forme) :' WRITE(IOIMP,4004) $ (FNPG.WELCHE(1,IBFN,1,1,IPGFAC,IBELFV),IBFN=1,NBFN $ ) 5 CONTINUE ENDIF ENDDO SEGDES FNPG * * On calcule les valeurs des dérivées premières des fonctions * de forme aux points de Gauss * NBLIG=1 NBCOL=NBFN N2LIG=1 N2COL=NDIMQR NBPOI=NPGFAC NBELM=NBELFV SEGINI DFNPG DO 7 IDIMQR=1,NDIMQR DO 72 JDIMQR=1,NDIMQR IF (JDIMQR.EQ.IDIMQR) THEN ORDER1.LECT(JDIMQR)=1 ELSE ORDER1.LECT(JDIMQR)=0 ENDIF 72 CONTINUE DO IBELFV=1,NBELFV DO 74 IPGFAC=1,NPGFAC DO 742 IBFN=1,NBFN * Calcul de < dP/dksi_idimqr (pg) > où pg est le * IPGFACieme point de Gauss MYPOLY=MYBPOL.LIPOLY(IBFN) NBMONO=MYPOLY.EXPMON(/2) $ JXCOPG.WELCHE(1,1,1,1,IPGFAC,IBELFV), $ MYPOLY.COEMON,MYPOLY.EXPMON, $ ORDER1.LECT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 742 CONTINUE * On calcule : < dN/dksi_idimqr (pg) > = < dP/dksi_idimqr (pg) > [Pn]^{-1} DO 744 IBFN=1,NBFN DFNPG.WELCHE(1,IBFN,1,IDIMQR,IPGFAC,IBELFV)= 744 CONTINUE 74 CONTINUE IF (IMPR.GT.3) THEN WRITE(IOIMP,*) $ 'Ordre de dérivation / coordonnée de réf. :' WRITE(IOIMP,4003) (ORDER1.LECT(JDIMQR),JDIMQR=1,NDIMQR) DO 76 IPGFAC=1,NPGFAC WRITE(IOIMP,*) 'Face n° ',IBELFV WRITE(IOIMP,*) 'Noeud de coordonnées :' WRITE(IOIMP,4004) (JXCOPG.WELCHE(1,1,1,JDIMQR,IPGFAC $ ,IBELFV),JDIMQR=1,NDIMQR) WRITE(IOIMP,*) 'DFNPG.WELCHE(nb.fns.forme) :' WRITE(IOIMP,4004) $ (DFNPG.WELCHE(1,IBFN,1,IDIMQR,IPGFAC,IBELFV), $ IBFN=1,NBFN) 76 CONTINUE ENDIF ENDDO 7 CONTINUE SEGDES DFNPG SEGSUP VECTPI SEGSUP ORDER1 SEGDES PNM1 SEGDES MYBPOL.LIPOLY(*) SEGDES MYBPOL SEGDES JXCOPG * * Normal termination * IRET=0 RETURN * * Format handling * 4003 FORMAT (2X,6(1X,I3)) 4004 FORMAT (2X,6(1X,1PE13.5)) * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine nif' RETURN * * End of subroutine NIF * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales