intgca
C INTGCA SOURCE MB234859 26/06/04 21:15:25 12564 C======================================================================= C= I N T G C A = C= ----------- = C= = C= Fonction : = C= ---------- = C= Integration d'un champ scalaire sur un maillage ou par element. = C= Sous-programme appele par INTGRA (intgra.eso). = C= = C= Parametres : (E)=Entree (S)=Sortie = C= ------------ = C= IPMODL (E) Pointeur sur le segment MMODEL = C= IPCHE1 (E) Pointeur sur segment MCHELM a une seule composante = C= IPCHE2 (E) Pointeur sur segment MCHELM de CARACTERISTIQUES = C= KOPELE (E) =0 si on ne veut pas un MCHAML resultat = C= IPINT (S) Pointeur sur le segment MCHELM resultat si demande = C= XRET (S) Flottant resultat de l'integration = C= IRET (S) Entier valant 1 en cas de succes, 0 sinon (et un = C= message d'erreur est imprime dans ce cas) = C= = C= Remarque : Autrefois, le champ resultat avait le meme support que = C= ---------- le champ IPCHE1,soit IPINT/MCHEL1.INFCHE(iSou,6)). = C= Maintenant, le champ resultat IPINT est donne au centre = C= de gravite quelque soit le support du champ integre, = C= soit IPINT.INFCHE(iSou,6)=2 . = C= Le flottant XRET est toujours calcule. = C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREEL C= Quelques constantes (2.Pi et 4.Pi) -> a mettre dans CCREEL ? PARAMETER (X2Pi=6.283185307179586476925286766559D0) PARAMETER (X4Pi=12.566370614359172953850573533118D0) -INC CCHAMP C==DEB= FORMULATION HHO == Include specifique ========================== -INC CCHHOPA C==FIN= FORMULATION HHO ================================================ -INC SMMODEL -INC SMCHAML -INC SMELEME POINTEUR MEDARC.MELEME -INC SMCOORD -INC SMINTE -INC TMPTVAL SEGMENT MWRK1 ENDSEGMENT SEGMENT MWRK2 REAL*8 TXR(3,3,NBBB),XJ(3,3) ENDSEGMENT SEGMENT MWRK3 ENDSEGMENT SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT PARAMETER (NINF=3) INTEGER INFOS(NINF) CHARACTER*(NCONCH) CONM CHARACTER*8 CHARIN LOGICAL LOGCOQ C ============================== C = Valeurs par defaut de sortie C ============================== IRET = 0 XRET = 0.D0 IPINT = 0 C 1 - QUELQUES INITIALISATIONS C ============================== C 1.1 - Activation du MMODEL C ===== MMODEL = IPMODL NSOUS = MMODEL.KMODEL(/1) C 1.2 - Activation du MCHEL1 C ===== MCHEL1 = IPCHE1 NZ = MCHEL1.ICHAML(/1) C ===== C Cas du MMODEL ou du MCHAML VIDE... C ===== IF ((NSOUS .EQ. 0) .OR. (NZ .EQ. 0)) THEN IRET = 1 IF (KOPELE .NE. 0) THEN L1=8 N1=0 N3=6 SEGINI,MCHELM TITCHE='SCALAIRE' IFOCHE=IFOUR IPINT =MCHELM ENDIF RETURN ENDIF C 1.3 - En cas de formulation DARCY, recuperation du maillage SOMMET C ===== MEDARC = 0 DO iSou = 1, NSOUS IMODEL = mmodel.KMODEL(iSou) IF (IDARC.NE.0) THEN IF (IERR.NE.0) RETURN CHARIN = 'MAILLAGE' IF (IERR.NE.0) RETURN GOTO 10 ENDIF ENDDO 10 CONTINUE C 2 - VERIFICATIONS DES DONNEES DE L'OPERATEUR C Verification du lieu support du MCHAML a integrer C ======================================================= IMODEL=KMODEL(1) NFOR =FORMOD(/2) IF(ITHER.NE.0 .OR. IDIFF.NE.0 .OR. IMETA.NE.0)THEN nmat = matmod(/2) C Support 6 SAUF pour le RAYONNEMENT... C Les cas-tests de RAYONNEMENT sont en erreur sans ca... IS = 3 IF (IRAY.EQ.0) IS = 6 ELSE IS =0 ISup1=0 iOK =0 if (ierr.ne.0) return IS=iOK * Dans le cas d'un champ constant, au centre de gravite ou aux noeuds, * on utilise les points de la rigidite. IF (IS.EQ.1 .OR. IS.EQ.2) IS=3 ENDIF ISup1=0 iOK =0 if (ierr.ne.0) return C ===== C 2.2 - Initialisation du MCHELM resultat si demande C ===== IF (KOPELE .NE. 0) THEN L1=8 N1=NSOUS N3=6 SEGINI,MCHELM TITCHE='SCALAIRE' IFOCHE=IFOUR IPINT =MCHELM ENDIF C ===== C 2.3 - Recuperation du nom de la composante de IPCHE1 C Traitement effectue ici car identique sur tout le modele C ===== MCHAML=MCHEL1.ICHAML(1) NBROBL=1 NBRFAC=0 SEGINI,NOMID LESOBL(1)=mchaml.NOMCHE(1) MOCOMP=NOMID NBTYPE=1 SEGINI,NOTYPE TYPE(1)='REAL*8' MOTYCO=NOTYPE C 3 - BOUCLE SUR LES ZONES ELEMENTAIRES DU MODELE (iSou) C ======================================================== isouss=0 DO 2000 iSou=1,NSOUS C ===== C 3.1 - Quelques initialisations C ===== IVACOM=0 NCARR =0 IVACAR=0 MCHAML=0 IPMEL1=0 IPMEL2=0 MWRK3 =0 C ===== C 3.2 - Activation du sous-modele (iSou) C ===== IMODEL = KMODEL(iSou) MELE = NEFMOD IF ((MELE.EQ.22).OR.(MELE.EQ.259)) GOTO 2000 isouss=isouss+1 CONM = CONMOD C ===== C 3.3 - Recuperation du maillage associe au sous-modele (iSou) C Traitement particulier dans le cas d'une formulation DARCY C ===== IPMAIL=IMAMOD IF (MEDARC.NE.0) THEN IF (IDARC.NE.0) THEN IPMAIL = MEDARC IF (NSOUS.GT.1 .AND. MEDARC.LISOUS(/1).GE.NSOUS) THEN IPMAIL = MEDARC.LISOUS(iSou) ENDIF ENDIF ENDIF C ===== C 3.4 - Determination ... C ===== IF (iOK.EQ.0) GOTO 240 iOK=0 C ===== C 3.5 - Recuperation d'informations sur l'element fini du sous-modele C ERREUR si la formulation n'est pas disponible C ???? ERREUR si l'element est une element JOINT (non implante) C ===== LOGCOQ=.FALSE. MINTE1=0 IF (ITHER.EQ.0 .AND. IDIFF.EQ.0) THEN MFR=INFELE(13) NLG=INFELE(14) mincdg=infmod(2+2) IPMINT=infmod(IS+2) MINTE=IPMINT NBPGAU=INFELE(4) IF (MFR.EQ.5) THEN LOGCOQ=.TRUE. MINTE1=INFMOD(3) ENDIF IPORE=INFELE(8) LW=INFELE(7) ELSE MINTE=IPMINT NBPGAU=minte.poigau(/1) IF (MELE.EQ.41.OR.MELE.EQ.56.OR.MELE.EQ.49) THEN LOGCOQ=.TRUE. MINTE1=IPMIN1 ENDIF IPORE=0 LW=100 ENDIF C IF (MFR.NE. 1.AND.MFR.NE. 3.AND.MFR.NE. 7.AND.MFR.NE.9.AND. & MFR.NE.11.AND.MFR.NE.13.AND.MFR.NE.33.AND.MFR.NE.5.AND. & MFR.NE.26.AND.MFR.NE.28.and.MFR.NE.78.and.MFR.NE.15.AND. & MFR.NE.17.AND.MFR.NE.49 .AND. & MFR.NE.31.AND.MFR.NE.35.AND.MFR.NE.63.AND.MFR.NE.71.AND. & MFR.NE.73.AND.MFR.NE.57.AND.MFR.NE.59.AND.MFR.NE.77.AND. C==DEB= FORMULATION HHO ================================================ & MFR.NE.HHO_MFR_ELEMENT .AND. C==FIN= FORMULATION HHO ================================================ & MFR.NE.72.AND.MFR.NE.74.AND.MFR.NE.27.AND.MFR.NE.75) THEN MOTERR=NOMTP(MELE) GOTO 240 ENDIF C IF (MFR.EQ.35.AND.IDIM.NE.2) THEN IF (MELE.NE.87.AND.MELE.NE.88) THEN MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='INTG' GOTO 240 ENDIF ENDIF C C ===== C 3.6 - Recuperation de la composante a integrer C Verification de sa presence dans le MCHAML (IPCHE1) C Appel a KOMCHA : NINFO=0 pour le moment... C Recuperation du MELVAL associe a ce MCHAML sur IPMAIL C ===== NINFO=0 & INFOS,NINFO,IVACOM) IF (IERR.NE.0) GOTO 230 MPTVAL=IVACOM MELVA1=IVAL(1) IF (ISup1.EQ.1 .AND. IPMINT .NE. 0) THEN IPMELE=MELVA1 MELVA1=IPMELS ENDIF IPMEL1=MELVA1 C ===== C 3.7 - Recuperation des noms des caracteristiques geometriques C ===== MOCARA = 0 IF (IPCHE2.NE.0) THEN CHARIN=' ' & MOTYPE,NBTYPE) IF (NCARR.NE.0) THEN & IVACAR) ENDIF NOMID = MOCARA SEGSUP,NOMID NOTYPE = MOTYPE SEGSUP,NOTYPE IF (IERR.NE.0) GOTO 210 ENDIF c IF (IVACAR.NE.0) THEN c MPTVAL=IVACAR c DO i=1,IVAL(/1) c IPMELV=IVAL(i) c CALL QUELCH(IPMELV,ICONS) c IF (ICONS.NE.0) THEN c CALL ERREUR(566) c GOTO 210 c ENDIF c ENDDO c ENDIF C ===== C 3.8 - Activation du maillage elementaire MELEME C ===== MELEME=IPMAIL NBNN =NUM(/1) NBELEM=NUM(/2) C ===== C 3.9 - Initialisation du MCHAML resultat (MCHAML) associe au modele C elementaire iSou (de maillage IPMAIL) SI demande C Remplissage des donnees associees a MCHAML dans MCHELM (global) C ===== IF (KOPELE.NE.0) THEN C= 3.9.1 - Initialisation de MCHAML N2=1 SEGINI,MCHAML NOMCHE(N2)='SCAL' TYPCHE(N2)='REAL*8' C= 3.9.2 - Remplissage de MCHEML(iSou) CONCHE(iSouss) = CONM IMACHE(iSouss) = IPMAIL ICHAML(iSouss) = MCHAML INFCHE(iSouss,1) = 0 INFCHE(iSouss,2) = 0 INFCHE(iSouss,3) = NIFOUR INFCHE(iSouss,4) = mincdg INFCHE(iSouss,5) = 0 INFCHE(iSouss,6) = 2 C= 3.9.3 - Initialisation du MELVAL associe a ce MCHAML N1PTEL = 1 N1EL = NBELEM N2PTEL = 0 N2EL = 0 SEGINI,MELVA2 IELVAL(N2) = MELVA2 IPMEL2 = MELVA2 ENDIF C ====== C 3.10 - Recuperation des donnees d'integration C Traitement particulier dans le cas du COQ4 (si le nombre de C points de Gauss vaut 5, seuls les 4 premiers sont traites, le C 5e servant uniquement au cisaillement) C ====== NBBB=NBNN NBNO=NBNN IF ((MELE.GE.108.AND.MELE.LE.110).OR. IF (MELE.EQ.49) THEN IF (NBPGAU.EQ.5) NBPGAU=4 ENDIF C ====== C 3.11 - Initialisation de quelques segments de travail C ====== SEGINI,MWRK1 IF (LOGCOQ) THEN SEGINI,MWRK2 SEGACT,MINTE1 SEGINI,MWRK3 ELSE IF (IPCHE2.NE.0) THEN SEGINI,MWRK3 ENDIF C ====== C 3.12 - Boucle sur les elements du sous-modele elementaire C ====== C==DEB= FORMULATION HHO ================================================ IF (MFR.EQ.HHO_MFR_ELEMENT) THEN IF (MELE.NE.HHO_NUM_ELEMENT) THEN END IF VALHHO = REAL(0.D0) CALL HHOITG(IMODEL, IPMEL1, & IVACAR,NCARR, IPMINT,NBPGAU, & VALHHO, IPMEL2, irr) IF (irr.NE.0) THEN GOTO 200 END IF XRET = XRET + VALHHO iOK = 1 GOTO 200 END IF C==FIN= FORMULATION HHO ================================================ DO IB=1,NBELEM C= 3.12.1 - Recuperation des coordonnees des noeuds de l element IB C= 3.12.2 - Determination des axes locaux aux noeuds (elements COQUES) IF (LOGCOQ) THEN IF (IRR.EQ.0) THEN GOTO 200 ENDIF IF (IVACAR.NE.0) THEN MPTVAL=IVACAR DO iGau=1,NBPGAU MELVAL=IVAL(1) IGMN=MIN(iGau,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) IF (IVAL(2).NE.0) THEN MELVAL=IVAL(2) IGMN=MIN(iGau,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) ELSE ENDIF ENDDO ELSE C* Si pas de caracteristiques, on met les epaisseurs a 1 (et non a 0) DO iGau=1,NBPGAU ENDDO ENDIF ENDIF C= 3.12.3 - Boucle sur les points d'integration ISDJC=0 ESTEL=XZero DO iGau=1,NBPGAU C SHP(1,i)=SHPTOT(1,i,iGau) SHP(2,i)=SHPTOT(2,i,iGau) SHP(3,i)=SHPTOT(3,i,iGau) SHP(4,i)=SHPTOT(4,i,iGau) ENDDO C IBMN=MIN(IB ,MELVA1.VELCHE(/2)) IGMN=MIN(iGau,MELVA1.VELCHE(/1)) FACSCA=MELVA1.VELCHE(IGMN,IBMN) C= 3.12.3.1 - Elements COQUES IF (LOGCOQ) THEN E3=DZEGAU(iGau) & TXR,SHPTOT,XJ,DJAC,IRR) IF (IRR.LT.0) THEN INTERR(1)=IB GOTO 200 ENDIF XJAC=ABS(DJAC)*POIGAU(iGau) C= 3.12.3.2 - Elements JOINTS 2D ELSE IF (MFR.EQ.35.AND.IDIM.EQ.2) THEN IF (DJAC.LE.0.) THEN GOTO 200 ENDIF XJAC=DJAC*POIGAU(iGau) C= 3.12.3.3 - Elements JOINTS 3D (JOT3 et JOI4) ELSE IF (MFR.EQ.35.AND.IDIM.EQ.3) THEN IF (MELE.EQ.87) THEN IF (NOQUAL.EQ.1) THEN INTERR(1)=IB MOTERR(1:4)='JOT3' GOTO 200 ELSE IF (NOQUAL.EQ.2) THEN INTERR(1)=IB MOTERR(1:4)='JOT3' GOTO 200 ENDIF ELSE IF (MELE.EQ.88) THEN IF (NOQUAL.EQ.1) THEN INTERR(1)=IB MOTERR(1:4)='JOI4' GOTO 200 ELSE IF (NOQUAL.EQ.2) THEN INTERR(1)=IB MOTERR(1:4)='JOI4' GOTO 200 ENDIF ENDIF IF (DJAC.LE.0.) THEN GOTO 200 ENDIF XJAC=DJAC*POIGAU(iGau) C JOINTS POREUX ELSE IF ((MELE.GE.108.AND.MELE.LE.110).OR. & (MELE.GE.185.AND.MELE.LE.190)) THEN XJAC=DJAC*POIGAU(iGau) C= 3.12.3.4 - Elements zone cohesive ZCO2 ELSE IF (MFR.EQ.77.AND.IDIM.EQ.2) THEN IF (DJAC.LE.0.) THEN GOTO 200 ENDIF XJAC=DJAC*POIGAU(iGau) C= 3.12.3.3 - Elements zone cohesive ZCO3ou4 ELSE IF (MFR.EQ.77.AND.IDIM.EQ.3) THEN dXdQsi=REAL(0.D0) dYdQsi=REAL(0.D0) dZdQsi=REAL(0.D0) dXdEta=REAL(0.D0) dYdEta=REAL(0.D0) dZdEta=REAL(0.D0) dXdQsi=dXdQsi+SHP(2,i)*XEL(1,i) dXdEta=dXdEta+SHP(3,i)*XEL(1,i) dYdQsi=dYdQsi+SHP(2,i)*XEL(2,i) dYdEta=dYdEta+SHP(3,i)*XEL(2,i) dZdQsi=dZdQsi+SHP(2,i)*XEL(3,i) dZdEta=dZdEta+SHP(3,i)*XEL(3,i) ENDDO z = (dXdQsi*dYdEta-dXdEta*dYdQsi) x = (dYdQsi*dZdEta-dYdEta*dZdQsi) y = (dZdQsi*dXdEta-dZdEta*dXdQsi) DJAC = sqrt(x*x+y*y+z*z) IF (DJAC.EQ.0.) THEN GOTO 200 ENDIF XJAC=DJAC*POIGAU(iGau) C= - Elements POI1 ou JOI1 ELSE IF ((MFR.EQ.27 .OR. MFR.EQ.75.or. > mfr.eq.26.or.mfr.eq.28) > .AND. (MELE.EQ.45 .OR. MELE.EQ.265)) THEN XJAC=1.D0/NBPGAU C= 3.12.3.4 - Autres elements ELSE IF (DJAC.LT.0) ISDJC=ISDJC+1 IF (IFOMOD.EQ.0.OR.IFOMOD.EQ.1.OR. & IFOMOD.EQ.4.OR.IFOMOD.EQ.5) THEN IF (IFOMOD.EQ.5) THEN DJAC=X4Pi*RR*RR*DJAC ELSE IF (IFOMOD.EQ.1.AND.NIFOUR.NE.0) THEN DJAC=XPi*RR*DJAC ELSE DJAC=X2Pi*RR*DJAC ENDIF ENDIF C C= 3.12.3.5 - Recuperation des caracteristiques selon l'element C= En dimension 1 (1D), pas de caracteristiques actuellement DIM3=1. FACAR=1. IF (IVACAR.EQ.0) GOTO 80 MPTVAL=IVACAR c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,99,99, 4, 4, 4, c 17 20 23 24 25 26 27 28 29 30 33 . 4,99,99,99,99,99, 4, 4, 4, 4,27,27,29,99,99,99,99 c 34 35 40 41 42 43 44 45 46 47 48 49 . ,99, 4, 4, 4, 4, 4, 4,27,29,99,27,99,27,99,99,27 c 50 56 57 65 . ,99,99,99,99,99,99,27, 4, 4, 4, 4,4, 4, 4, 4, 4, . 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,4, 4, . 4,29,99,99,99,99,99,99,99,99,27,99,99,99,99,99,99 . ,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 . ,99,99,99,99,99,99,99,99,27,27),MELE 99 MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='INTGCA' GOTO 200 C= 3.12.3.6 - Caracteristiques pour les elements MASSIFS 4 MELVAL=IVAL(1) IF (MELVAL.NE.0) THEN IGMN=MIN(iGau,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) FACAR=VELCHE(IGMN,IBMN) ENDIF GOTO 80 C= 3.12.3.7 - Caracteristiques pour les elements COQUES et BARRES 27 MELVAL=IVAL(1) IGMN=MIN(iGau,VELCHE(/1)) IBMN=MIN(IB, VELCHE(/2)) FACAR=VELCHE(IGMN,IBMN) IF (MFR.EQ.3.AND.IFOUR.EQ.-2) THEN MELVAL=IVAL(3) IF (MELVAL.NE.0) DIM3=VELCHE(IGMN,IBMN) ENDIF GOTO 80 C= 3.12.3.8 - Caracteristiques pour les elements POUTRES et TUYAUX C= Traitement particulier pour les TUYAUX 29 DO i=1,NCARR IF (IVAL(i).NE.0) THEN MELVAL=IVAL(i) IGMN=MIN(iGau,VELCHE(/1)) IBMN=MIN(IB,VELCHE(/2)) ENDIF ENDDO IF (MELE.EQ.42) THEN ENDIF C= 3.12.3.9 - Calcul de la composante integree en ce point de Gauss 80 CONTINUE XJAC=ABS(DJAC)*POIGAU(iGau)*FACAR*DIM3 ENDIF ESTEL=ESTEL+FACSCA*XJAC ENDDO C= 3.12.4 - Ajout de la contribution de cet element au resultat C= et le cas echeant au MCHAML au centre de gravite IF (ISDJC.NE.0 .AND. ISDJC.NE.NBPGAU) THEN INTERR(1)=IB GOTO 200 ENDIF XRET=XRET+ESTEL IF (KOPELE.NE.0) THEN IBMN=MIN(IB,MELVA2.VELCHE(/2)) MELVA2.VELCHE(1,IBMN)=ESTEL ENDIF ENDDO C ====== C 3.13 - Desactivation/suppression de segments associes a iSou C Sortie prematuree en cas d'ERREUR (iOK=0) C ====== iOK=1 200 SEGSUP,MWRK1 IF (LOGCOQ) THEN SEGSUP,MWRK2 SEGSUP,MWRK3 ELSE IF (IPCHE2.NE.0) THEN SEGSUP,MWRK3 ENDIF IF (IPMEL1.NE.0) THEN IF (ISup1.EQ.1) THEN SEGSUP,MELVA1 ENDIF ENDIF 240 CONTINUE IF (iOK.EQ.0) THEN IF (KOPELE.NE.0) THEN IF (IPMEL2.NE.0) SEGSUP,MELVA2 IF (MCHAML.NE.0) SEGSUP,MCHAML SEGSUP,MCHELM ENDIF GOTO 300 ENDIF 2000 continue C 4 - MENAGE : DESACTIVATION/DESTRUCTION DE SEGMENTS C ==================================================== IRET=1 IF (KOPELE.NE.0) THEN if (n1.ne.isouss) then n1=isouss SEGADJ,mchelm endif ENDIF 300 NOMID =MOCOMP NOTYPE=MOTYCO SEGSUP,NOTYPE,NOMID c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales