zerop
C ZEROP SOURCE OF166741 24/10/07 21:15:53 12016 C_______________________________________________________________________ C C OPERATEUR MCHAML A ZERO C C Entrees: C ________ C C IPMODL Pointeur sur un MMODEL C MOT Mot indiquant le type du MCHAML a creer C C Sorties: C ________ C C IPCHEL Pointeur sur un MCHAML resultat a ZERO C C Passage aux nouveaux chamelems par i.monnier le 30.8.90 C C_______________________________________________________________________ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMMODEL -INC SMCHAML -INC SMLREEL SEGMENT info INTEGER infell(JG) ENDSEGMENT CHARACTER*(*) MOT PARAMETER (NMOT=24) CHARACTER*8 LISMOT(NMOT) CHARACTER*50 LISTIT(NMOT) DIMENSION MSUPPO(NMOT) CHARACTER*8 CMATE LOGICAL lsupre EXTERNAL LONG DATA LISMOT / 'NOEUD ', 'GRAVITE ', 'RIGIDITE', 'MASSE ', & 'STRESSES', 'DEPLACEM', 'FORCES ', 'REACTUAL', & 'FVOLUMIQ', 'GRADIENT', 'CONTRAIN', 'DEFORMAT', & 'MATERIAU', 'CARACTER', 'TEMPERAT', 'PRINCIPA', & 'MAHOOKE ', 'HOTANGEN', 'DILATATI', 'VARINTER', & 'GRAFLEXI', 'VONMISES', 'VIMISTRU', 'DEFINELA'/ * * 'NOEUD ', 'GRAVITE ', 'RIGIDITE', 'MASSE ', DATA MSUPPO / 1 , 2 , 3 , 4 , * 'STRESSES', 'DEPLACEM', 'FORCES ', 'REACTUAL', & 5 , 1 , 1 , 1 , * 'FVOLUMIQ', 'GRADIENT', 'CONTRAIN', 'DEFORMAT', & 3 , 5 , 5 , 5 , * 'MATERIAU', 'CARACTER', 'TEMPERAT', 'PRINCIPA', & 3 , 3 , 5 , 5 , * 'MAHOOKE ', 'HOTANGEN', 'DILATATI', 'VARINTER', & 3 , 5 , 5 , 5 , * 'GRAFLEXI', 'VONMISES', 'VIMISTRU', 'DEFINELA'/ & 5 , 5 , 1 , 5/ * DATA LISTIT / 'NOEUD', 'GRAVITE', 'RIGIDITE', 'MASSE', & 'STRESSES', 'DEPLACEMENTS', 'FORCES', & 'REACTUALISATION', 'FORCES VOLUMIQUES', & 'GRADIENT', 'CONTRAINTES', 'DEFORMATIONS', & 'CARACTERISTIQUES', 'CARACTERISTIQUES', & 'TEMPERATURES', 'CONTRAINTES PRINCIPALES', & 'MATRICE DE HOOKE', 'MATRICE DE HOOKE TANGENTE', & 'DILATATIONS', 'VARIABLES INTERNES', & 'GRADIENT DE FLEXION','VON MISES', & 'VARIABLES INTERNES MICROSTRUCTURES', & 'DEFORMATIONS INELASTIQUES'/ IPCHEL = 0 * * Verification que le sous-type du champ demande est prevu : * IPLAC = 0 IF (IPLAC.EQ.0) THEN RETURN ENDIF * NHRM = NIFOUR * * Decompte des SOUS-MODELES utiles : MMODEL = IPMODL NSOUS=0 DO 111 is = 1, mmodel.KMODEL(/1) imodel = mmodel.kmodel(is) C On determine si le sous-modele est a conserver C avec traitement des cas particuliers IF (imodel.nefmod .EQ. 22 ) GOTO 111 IF (formod(1) .EQ. 'LIAISON') GOTO 111 NSOUS=NSOUS+1 111 CONTINUE C----------------------------------------------------------------------- C CREATION DU MCHELM C----------------------------------------------------------------------- N1 = NSOUS N3 = 6 ISUPPO = MSUPPO(IPLAC) SEGINI,MCHELM mchelm.TITCHE = LISTIT(IPLAC)(1:L1) mchelm.IFOCHE = IFOUR C----------------------------------------------------------------------- C BOUCLE SUR LES SOUS-MODELES C----------------------------------------------------------------------- NZ = 0 DO 100 is = 1, NSOUS IMODEL = mmodel.kmodel(is) C On determine si le sous-modele est a conserver C avec traitement des cas particuliers IF (imodel.nefmod .EQ. 22 ) GOTO 100 IF (formod(1) .EQ. 'LIAISON') GOTO 100 C IPMAIL = imodel.IMAMOD MELE = imodel.NEFMOD NPINT = imodel.INFMOD(1) CMATE = imodel.CMATEE C MATE = imodel.IMATEE INATU = imodel.INATUU * AIGUILLAGE SUIVANT MOT CLE * MOCOMP = 0 lsupre = .true. * GOTO ( 1, 1, 1, 1, 1, 6, 7,99,99,10,11,12,13,14,15,16, 2, 2, & 99,20,21,99,23,24) IPLAC * 99 CONTINUE GOTO 120 * 1 NBROBL = 1 NBRFAC = 0 SEGINI,nomid nomid.LESOBL(1) = 'SCAL' MOCOMP = nomid GOTO 120 * 2 NBROBL = 1 NBRFAC = 0 SEGINI,nomid nomid.LESOBL(1) = 'MAHO' MOCOMP = nomid GOTO 120 * 6 IF (imodel.lnomid(1).NE.0) THEN MOCOMP = imodel.lnomid(1) lsupre = .false. ELSE ENDIF GOTO 120 * 7 IF (imodel.lnomid(2).NE.0) THEN MOCOMP = imodel.lnomid(2) lsupre = .false. ELSE ENDIF GOTO 120 * 10 IF (imodel.lnomid(3).NE.0) THEN MOCOMP = imodel.lnomid(3) lsupre = .false. ELSE ENDIF GOTO 120 * 11 IF (imodel.lnomid(4).NE.0) THEN MOCOMP = imodel.lnomid(4) lsupre = .false. ELSE ENDIF GOTO 120 * 12 IF (imodel.lnomid(5).NE.0) THEN MOCOMP = imodel.lnomid(5) lsupre = .false. ELSE ENDIF GOTO 120 * 13 IF (imodel.lnomid(6).NE.0) THEN MOCOMP = imodel.lnomid(6) lsupre = .false. ELSE ENDIF GOTO 120 * 14 IF (imodel.lnomid(7).NE.0) THEN MOCOMP = imodel.lnomid(7) lsupre = .false. ELSE ENDIF GOTO 120 * 15 IF (imodel.lnomid(8).NE.0) THEN MOCOMP = imodel.lnomid(8) lsupre = .false. ELSE ENDIF GOTO 120 * 16 IF (imodel.lnomid(9).NE.0) THEN MOCOMP = imodel.lnomid(9) lsupre = .false. ELSE ENDIF GOTO 120 * 20 IF (imodel.lnomid(10).NE.0) THEN MOCOMP = imodel.lnomid(10) lsupre = .false. ELSE ENDIF GOTO 120 * 21 IF (imodel.lnomid(11).NE.0) THEN MOCOMP = imodel.lnomid(11) lsupre = .false. ELSE ENDIF GOTO 120 * 23 IF (imodel.lnomid(12).NE.0) THEN MOCOMP = imodel.lnomid(12) lsupre = .false. ELSE ENDIF GOTO 120 * 24 IF (imodel.lnomid(13).NE.0) THEN MOCOMP = imodel.lnomid(13) lsupre = .false. ELSE ENDIF GOTO 120 * 120 CONTINUE C Pas de composantes a traiter pour le sous-modele : IF (MOCOMP.EQ.0) GOTO 100 nomid = MOCOMP SEGACT,nomid NOBL = nomid.LESOBL(/2) NFAC = nomid.LESFAC(/2) N2 = NOBL + NFAC IF (N2.EQ.0) GOTO 110 C Recuperation d'informations sur le support : C Traitement des cas particuliers : NFORQ = FORMOD(/2) IF (icont.NE.0 .OR. ichph.NE.0)THEN C Pour le contact, on met aux noeuds d'office : ISUPMO = 1 MINTE = 0 NSTRS = 0 ELSEIF(ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) THEN ISUPMO = ISUPPO IF (ISUPPO .GT. 2) ISUPMO = 6 nmat = imodel.matmod(/2) C Support 6 SAUF pour le RAYONNEMENT... C Les cas-tests de RAYONNEMENT sont en erreur sans ca... IF (iplr.eq.0) THEN IF (ISUPMO .EQ. 1) THEN ELSE IF (ISUPMO .EQ. 2) THEN ELSE ENDIF ELSE ISUPMO = ISUPPO ENDIF NSTRS = 0 ELSE C Pour les autres formulations : ISUPMO = ISUPPO IF (imodel.infmod(/1).LT.2+ISUPMO) THEN IF (IERR.NE.0) GOTO 900 info = ipinf MINTE = info.infell(11) NSTRS = info.infell(16) SEGSUP,info ELSE MINTE = imodel.INFMOD(2+ISUPMO) NSTRS = imodel.INFELE(16) ENDIF ENDIF c write(6,*) 'ISUPMO,ISUPPO =',ISUPMO,ISUPPO C SEGINI,MCHAML C IF (NOBL.EQ.0) GOTO 130 DO io = 1, NOBL mchaml.NOMCHE(io) = nomid.LESOBL(io) N1PTEL = 0 N1EL = 0 N2PTEL = 0 N2EL = 0 IF (IPLAC.EQ.17.OR.IPLAC.EQ.18) THEN mchaml.TYPCHE(io) = 'POINTEURLISTREEL' N2PTEL = 1 N2EL = 1 SEGINI,MELVAL JG = 1 SEGINI,MLREEL melval.IELCHE(1,1) = MLREEL ELSE IF (IPLAC.EQ.20.AND.CMATE.EQ.'SECTION')THEN mchaml.TYPCHE(io) = 'POINTEURMCHAML ' N2PTEL = 1 N2EL = 1 SEGINI,MELVAL melval.IELCHE(1,1) = 0 * * MODELE DE MAXWELL - COMPOSANTES AUTRES QUE EPSE ELSE IF (IPLAC.EQ.20.AND.INATU.EQ.74.AND.io.GT.1) THEN mchaml.TYPCHE(IO) = 'POINTEURLISTREEL' N2PTEL = 1 N2EL = 1 SEGINI,MELVAL JG = NSTRS SEGINI,MLREEL melval.IELCHE(1,1) = MLREEL * * MODELE MAXOTT COMPOSANTE AUTRES QUE REAL*8 ELSE IF (IPLAC.EQ.20.AND.INATU.EQ.106) THEN IF ((IFOUR.EQ.2.AND.MFR.EQ.1) & .AND. io.GT.21) THEN mlreel = 1 ELSE IF ((IFOUR.EQ.-1.OR.IFOUR.EQ.-3.OR. & IFOUR.EQ.0 .OR.IFOUR.EQ.1) & .AND. io.GT.16) THEN mlreel = 1 ELSE IF ((IFOUR.EQ.-2.OR. & (IFOUR.EQ.2.AND.(MFR.EQ.3.OR.MFR.EQ.9))) & .AND. io.GT.13) THEN mlreel = 1 ELSE mlreel = 0 ENDIF IF (mlreel .EQ. 0) THEN mchaml.TYPCHE(io) = 'REAL*8' N1PTEL = 1 N1EL = 1 SEGINI,MELVAL ELSE mchaml.TYPCHE(io) = 'POINTEURLISTREEL' N2PTEL = 1 N2EL = 1 SEGINI,MELVAL JG = NSTRS SEGINI,MLREEL melval.IELCHE(1,1) = MLREEL ENDIF ELSE mchaml.TYPCHE(io) = 'REAL*8' N1PTEL = 1 N1EL = 1 SEGINI,MELVAL ENDIF mchaml.IELVAL(io) = MELVAL ENDDO 130 CONTINUE IF (NFAC.EQ.0) GOTO 140 DO io = 1, NFAC mchaml.NOMCHE(io+NOBL) = nomid.LESFAC(io) N1PTEL = 0 N1EL = 0 N2PTEL = 0 N2EL = 0 * MODELE MAXOTT - SUITE IF (INATU.EQ.106) THEN mchaml.TYPCHE(io+NOBL) = 'POINTEURLISTREEL' N2PTEL = 1 N2EL = 1 SEGINI,MELVAL JG = NSTRS SEGINI,MLREEL melval.IELCHE(1,1) = MLREEL * * MODELE DE MAXWELL - SUITE ELSE IF (INATU.EQ.74) THEN mchaml.TYPCHE(io+NOBL) = 'POINTEURLISTREEL' N2PTEL = 1 N2EL = 1 SEGINI,MELVAL JG = NSTRS SEGINI,MLREEL melval.IELCHE(1,1) = MLREEL ELSE mchaml.TYPCHE(io+NOBL) = 'REAL*8' N1PTEL = 1 N1EL = 1 SEGINI,MELVAL ENDIF mchaml.IELVAL(io+NOBL) = MELVAL ENDDO 140 CONTINUE C IF (IPLAC.EQ.11 .OR. IPLAC.EQ.20) THEN IF (CMATE.EQ.'MODAL' .OR. CMATE.EQ.'STATIQUE') THEN N2 = 1 SEGADJ,MCHAML ENDIF ENDIF C NZ = NZ + 1 mchelm.IMACHE(NZ) = imodel.IMAMOD mchelm.CONCHE(NZ) = imodel.CONMOD mchelm.ICHAML(NZ) = MCHAML mchelm.INFCHE(NZ,1) = 0 mchelm.INFCHE(NZ,2) = 0 mchelm.INFCHE(NZ,3) = NHRM mchelm.INFCHE(NZ,4) = MINTE mchelm.INFCHE(NZ,5) = 0 mchelm.INFCHE(NZ,6) = ISUPMO 110 CONTINUE nomid = MOCOMP IF (lsupre) THEN SEGSUP,nomid ENDIF 100 CONTINUE C----------------------------------------------------------------------- C Fin de la boucle sur les SOUS-MODELES retenus C----------------------------------------------------------------------- IF (NZ.NE.NSOUS) THEN N1 = NZ SEGADJ,MCHELM ENDIF IPCHEL = MCHELM 900 CONTINUE c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales