manuc7
C MANUC7 SOURCE OF166741 24/10/03 21:15:24 12022 *------------------------------------------------------------------ * * CREATION D'UN MCHAML * *------------------------------------------------------------------ * * PARAMETRES: (E)=ENTREE (S)=SORTIE * ----------- * * IPMODL (E) POINTEUR DE L'OBJET MODELE * MODELE et SOUS-MODELE(S) ACTIFS EN ENTREE/SORTIE * MLMOTS (E) POINTEUR SUR UN LISTMOTS CONTENANT LES NOMS * ACTIF EN ENTREE/SORTIE * IPOI (E) POINTEUR SUR UN LISTENTI OU UN LISTREEL * MONMOT (E) MOT DE 8 CARACTERES * MLMOT3 (E) POINTEUR SUR UN LISTMOTS CONTENANT LES TYPES * MLMOT2 (E) POINTEUR SUR UN LISTMOTS CONTENANT LES TYPES * DES CONSTITUANTS * LETYP (E) TYPE DU MCHAML A CREER * JER1 (E) LONGUEUR DE LA CHAINE DE CARACTERES * ISUP1 (E) SUPPORT DEMANDE * ICHA (S) POINTEUR SUR LE MCHAML RESULTAT * * LANGAGE: * -------- * * ESOPE + FORTRAN77 * ************************************************************************ & LETYP,JER1,ISUP1,ICHA,itart) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCHAML -INC SMELEME -INC SMLMOTS -INC SMLREEL -INC SMLENTI -INC SMMODEL -INC SMINTE SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT PARAMETER ( N3 = 6 , NINF = 3 ) CHARACTER*(*) MONMOT, LETYP CHARACTER*8 CHARIN CHARACTER*(NCONCH) CONM CHARACTER*4 CAR,CAR2 DIMENSION INFOS(NINF) ICHA = 0 ITHER= 0 IDIFF= 0 IMETA= 0 ICHPH= 0 MMODEL = IPMODL NSOUS = mmodel.KMODEL(/1) * Determination du nombre de sous-modeles (sous-zones) a traiter : NSZ1 = NSOUS DO i = 1, NSOUS IMODEL = mmodel.KMODEL(i) IF (imodel.NEFMOD.EQ.259) NSZ1 = NSZ1 - 1 ENDDO * INITIALISATION DU SEGMENT MCHELM * N1 = NSZ1 L1 = JER1 SEGINI,MCHELM mchelm.TITCHE = LETYP mchelm.IFOCHE = IFOUR IF (MONMOT.EQ.'REAL*8 ') THEN MLREEL = IPOI ELSE MLENTI = IPOI ENDIF INFOS(1) = 0 INFOS(2) = 0 INFOS(3) = NIFOUR * Deux petits segments utiles : NBTYPE = 1 SEGINI,NOTYPE TYPE(1) = ' ' MOTYBL = NOTYPE NBROBL = 1 NBRFAC = 0 SEGINI,NOMID LESOBL(1) = ' ' MOTAUX = NOMID * * BOUCLE SUR LES ZONES ELEMENTAIRES DU MODELE * kch = 0 DO 20 isous = 1, NSOUS * IMODEL = mmodel.KMODEL(isous) C C ON RECUPERE L INFORMATION GENERALE C IPMAIL = imodel.IMAMOD CONM = imodel.CONMOD C____________________________________________________________________ C C INFORMATION SUR L'ELEMENT FINI C____________________________________________________________________ C MELE = imodel.NEFMOD IF (MELE.EQ.259) GOTO 20 NFOR = imodel.FORMOD(/2) C C CAS DE LA FORMULATION DARCY ON VA EXTRAIRE LE MAILLAGE SOMMET C IF (IDARC.NE.0)THEN CHARIN = 'MAILLAGE' IF (IERR.NE.0) RETURN C* Inutile de reactiver le modele suite a LEKMOD : IPT1 = IOBRE IPMAIL= IOBRE c??? IF (NSZ1.GT.1) THEN IF (NSOUS.GT.1) THEN segact ipt1 IPMAIL = IPT1.LISOUS(isous) ENDIF ENDIF C Fin du cas special DARCY * IPPORE = 0 ISUP = ISUP1 * EN CAS DE FORMULATION CONTACT OU CHANGEMENT_PHASE OU CONTRAINTE, SEUL SUPPORT = LES NOEUDS IF (ICONT.NE.0 .OR.ICNTR.NE.0 .OR. ICHPH.NE.0) ISUP = 1 IPMIN = 0 info = 0 IF (ISUP.NE.1) THEN IF (ITHER.EQ.0 .AND. IDIFF.EQ.0 .AND. IMETA.EQ.0) THEN IF (2+ISUP.GT.infmod(/1)) THEN IF (IERR.NE.0) GOTO 99 info = IPINF IPMIN = info.INFELL(11) SEGSUP,info else IPMIN = infmod(ISUP+2) endif ELSE c en THERMIQUE, DIFFUSION, METALLURGIE, CHANGEMENT_PHASE on veut les points de gauss ad hoc nmat = imodel.matmod(/2) C Support 6 SAUF pour le RAYONNEMENT... C Les cas-tests de RAYONNEMENT sont en erreur sans ca... IF (iray.EQ.0) THEN ISUP = 6 ELSE ENDIF ENDIF ENDIF MINTE = IPMIN kch = kch+1 IMACHE(kch) = IPMAIL CONCHE(kch) = CONMOD INFCHE(kch,1) = 0 INFCHE(kch,2) = 0 INFCHE(kch,3) = NIFOUR INFCHE(kch,4) = IPMIN INFCHE(kch,5) = 0 INFCHE(kch,6) = ISUP SEGINI,MCHAML ICHAML(kch) = MCHAML N1PTEL = 0 N1EL = 0 N2PTEL = 0 N2EL = 0 IF (MONMOT.EQ.'REAL*8 ') THEN N1PTEL = 1 N1EL = 1 DO in = 1, N2 SEGINI,MELVAL mchaml.TYPCHE(in) = MONMOT(1:6) mchaml.IELVAL(in) = MELVAL ENDDO ELSE DO 10 in = 1, N2 * * TRAITEMENT PARTICULIER POUR LE TYPE 'MCHAML' *--------------- IF (CAR.EQ.'MCHA') THEN * * MODIF 02/94 POUR POUTRE A FIBRES * TEST SUR LES MAILLAGES POINTES * IPCHE1 = mlenti.LECT(in) MCHEL1 = IPCHE1 NSOU1 = MCHEL1.ICHAML(/1) IDEM = 0 DO i = 1, NSOU1 IF (IPMAIL.EQ.MCHEL1.IMACHE(i)) IDEM = 1 ENDDO IF (IDEM.EQ.0) GO TO 295 * IF (IRET1.GT.1) THEN SEGSUP MCHAML GOTO 99 ENDIF nomid = MOTAUX nomid.LESOBL(1)= mchaml.NOMCHE(in) $ 2,INFOS,3,IVAAUX) IF (IERR.NE.0)THEN SEGSUP MCHAML GOTO 99 ENDIF IF (IRET1.EQ.1) THEN IF (IERR.NE.0) THEN MPTVAL = IVAAUX MELVA1 = IVAL(1) SEGSUP MPTVAL,MCHAML GOTO 99 ENDIF ENDIF MPTVAL = IVAAUX mchaml.TYPCHE(in) = TYVAL(1) MELVA1 = IVAL(1) SEGINI,MELVAL=MELVA1 IELVAL(IN) = MELVAL IF (IRET1.EQ.1)THEN SEGSUP MELVA1 ENDIF SEGSUP,MPTVAL GOTO 10 295 CONTINUE ENDIF * IF (itart.EQ.1 .AND. CAR.EQ.'LIST' $ .AND. CAR2.EQ.'REEL') THEN mchaml.TYPCHE(IN) = 'REAL*8 ' ipt4 = ipmail N1EL = ipt4.num(/2) N1PTEL = 1 N2PTEL = 0 N2EL = 0 SEGINI,MELVAL mlree2 = mlenti.lect(in) ia = 0 do i = 1, n1el ia = ia+1 IF (ia.GT.jg2) ia=1 enddo ELSE mchaml.TYPCHE(IN) = 'POINTEUR'//car//car2 N1PTEL = 0 N1EL = 0 mlent2 = mlenti.lect(in) if (ITART.EQ.1.AND.car2(1:4).eq.'INT ') then ipt4 = ipmail N2EL = ipt4.num(/2) N2PTEL = 1 SEGINI,MELVAL jg2 = mlent2.lect(/1) ia = 0 do i = 1, n2el ia = ia+1 IF (ia.GT.jg2) ia=1 melval.ielche(N2PTEL,i) = mlent2.lect(ia) enddo else N2PTEL = 1 N2EL = 1 SEGINI,MELVAL melval.ielche(1,1) = mlent2 endif ENDIF mchaml.IELVAL(IN) = MELVAL 10 CONTINUE * ENDDO ENDIF 20 CONTINUE * ENDDO 99 CONTINUE ICHA = MCHELM IF (IERR.NE.0) THEN SEGSUP,MCHELM ICHA = 0 ENDIF notype = MOTYBL SEGSUP,notype nomid = MOTAUX SEGSUP,nomid c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales