chelco
C CHELCO SOURCE PV090527 24/08/03 21:15:02 11976 C======================================================================= C ENTREES C IVAL = 0 SI ON VEUT IDIM CHAMELEMS CONTENANT CHACUN UNE COMPOSA C IVAL = 1 SI ON VEUT LA PREMIERE COMPOSANTE C IVAL = 2 SI ON VEUT LA DEUXIEME COMPOSANTE C IVAL = 3 SI ON VEUT LA TROISIEME COMPOSANTE C IPCHEL = POINTEUR ACTIF SUR UN CHAMP PAR ELEMENT (TYPE MCHAML) C SORTIES C IPCHE1 = POINTEURS ACTIFS SUR CHAMP/ELEMENT DE CHAQUE COORDONNEE C IPCHE2 C IPCHE3 C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCOORD -INC SMCHAML -INC SMELEME -INC SMINTE SEGMENT MTRA REAL*8 XE(3,NBMA) ENDSEGMENT CHARACTER*(4) NOMEL IF (IVAL.EQ.0) THEN IDEB=1 IFIN=IDIM ELSE IDEB=IVAL IFIN=IVAL ENDIF MCHEL1 = IPCHEL N1 = MCHEL1.INFCHE(/1) N3 = MCHEL1.INFCHE(/2) L1 = 8 NSOUS = N1 C (Sur)Dimensionnement & Initialisation du segment MTRA NBMA = 0 DO ISOUS = 1, NSOUS MELEME = mchel1.IMACHE(ISOUS) NBMA = MAX( NBMA, meleme.NUM(/1)) ENDDO SEGINI,MTRA C BOUCLE SUR LES COMPOSANTES A EXTRAIRE ich = 0 IPCHE1 = 0 IPCHE2 = 0 IPCHE3 = 0 DO ICO = IFIN, IDEB, -1 C C ON INITIALISE LE MCHAML CONTENANT LA COORDONNEE ICO C SEGINI,MCHELM mchelm.IFOCHE = MCHEL1.IFOCHE mchelm.TITCHE = 'SCALAIRE' ich = ich + 1 IF (ich.EQ.1) IPCHE1 = MCHELM IF (ich.EQ.2) IPCHE2 = MCHELM IF (ich.EQ.3) IPCHE3 = MCHELM C C BOUCLE SUR LES SOUS-ZONES C DO ISOUS = 1, NSOUS mchelm.CONCHE(ISOUS) = MCHEL1.CONCHE(ISOUS) mchelm.IMACHE(ISOUS) = MCHEL1.IMACHE(ISOUS) DO isc = 1, N3 mchelm.INFCHE(ISOUS,isc) = MCHEL1.INFCHE(ISOUS,isc) ENDDO MELEME = mchelm.IMACHE(ISOUS) NBELEM = meleme.NUM(/2) NBNN = meleme.NUM(/1) ISUP = mchelm.INFCHE(ISOUS,6) IF (ISUP.NE.1) THEN MINTE = mchelm.INFCHE(ISOUS,4) NBPGAU = minte.SHPTOT(/3) ELSE NBPGAU = NBNN ENDIF N2 = 1 SEGINI MCHAML mchaml.NOMCHE(1) = 'SCAL ' mchaml.TYPCHE(1) = 'REAL*8 ' mchelm.ICHAML(ISOUS) = MCHAML N1EL = NBELEM N1PTEL = NBPGAU N2EL = 0 N2PTEL = 0 SEGINI,MELVAL mchaml.IELVAL(1) = MELVAL IF (ISUP.NE.1) THEN facz = 1.D0 NBOUC = NBNN C ON DIVISE PAR 2 LE RESULTAT POUR CERTAINS ELEMENTS DE JOINTS CAM 29/3/16 UNIQUEMENT SI LE SUPPORT EST DIFFERENT DE 1 NOMEL = NOMS(meleme.ITYPEL) IF ( NOMEL.EQ.'RAC2' .OR. NOMEL.EQ.'LIA3' .OR. & NOMEL.EQ.'LIA4' .OR. NOMEL.EQ.'LIA6' .OR. & NOMEL.EQ.'LIA8' .OR. NOMEL.EQ.'RAP3' .OR. & NOMEL.EQ.'LIP6' .OR. NOMEL.EQ.'LIP8' ) THEN facz = 0.5D0 IF (NOMEL.EQ.'RAP3') NBOUC = 6 IF (NOMEL.EQ.'LIP6') NBOUC = 12 IF (NOMEL.EQ.'LIP8') NBOUC = 16 ENDIF DO IB = 1, NBELEM DO IGAU = 1, NBPGAU XX = 0.D0 DO isc = 1, NBOUC XX = XX + SHPTOT(1,isc,IGAU)*XE(ICO,isc) ENDDO VELCHE(IGAU,IB) = facz*XX ENDDO ENDDO ELSE DO IB = 1, NBELEM DO IGAU = 1, NBPGAU VELCHE(IGAU,IB) = XE(ICO,IGAU) ENDDO ENDDO ENDIF ENDDO C Fin BOUCLE sur les SOUS-ZONES ENDDO C Fin BOUCLE sur les COMPOSANTEs SEGSUP MTRA c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales