quesup
C QUESUP SOURCE OF166741 24/10/04 21:15:02 12023 *______________________________________________________________________ * * VERIFICATION DU LIEU SUPPORT DES MCHAML * * IPMODE POINTEUR SUR UN OBJET MODELE (UTILISE UNIQUEMENT QUAND ISUP>0) * ACTIF EN ENTREE ACTIF EN SORTIE * IPCHE1 POINTEUR SUR LE MCHAML DONT ON SOUHAITE VERIFIER LE SUPPORT * * ISUP = 0 ON VEUT CONNAITRE LE SUPPORT * ISUP > 0 : * ISUP = 1 ON SOUHAITE QUE IPCHE1 SOIT AUX NOEUDS * = 2 ON SOUHAITE QUE IPCHE1 SOIT AUX CENTRE DE GRAVITE * = 3 ON SOUHAITE QUE IPCHE1 SOIT AUX POINTS DE GAUSS POUR * LA RIGIDITE * = 4 ON SOUHAITE QUE IPCHE1 SOIT AUX POINTS DE GAUSS POUR * LA MASSE * = 5 ON SOUHAITE QUE IPCHE1 SOIT AUX POINTS DE GAUSS POUR * LES CONTRAINTES * * ICOND = 0 SI LE MCHAML PEUT ETRE SUR LE SUPPORT DEMANDE OU AUX * NOEUDS (UTILISE UNIQUEMENT QUAND ISUP >0) * 1 SI LE MCHAML DOIT ETRE IMPERATIVEMENT SUR LE SUPPORT * VOULU (CAS NOTAMENT DES MATRICE DE HOOKES ET DES * DES MATRICES DE HOOKES TANGENTES) * * DANS LE CAS ISUP > 0 * IRET = 1 IPCHE1 SE TROUVE AUX NOEUDS * = 0 IPCHE1 EST BIEN SUR LE SUPPORT DEMANDE * = 9999 LE SUPPORT DE UNE OU PLUSIEURS SOUS ZONE N'EST * PAS LE BON * DANS LE CAS ISUP = 0 * IRET > 0 IL DONNE LE NUMERO DU SUPPORT * = 0 LE CHAMP EST CONSTANT * = 9999 LE CHAMELEM N'EST PAS HOMOGENE AU NIVEAU SUPPORT * DANS TOUS LES CAS (ISUP >= 0) * IRET2 > 0 IL DONNE LE NUMERO DU SUPPORT * = 9999 LE CHAMELEM N'EST PAS HOMOGENE AU NIVEAU SUPPORT * OU SI LE TABLEAU INFCHE NE CONTIENT PAS CETTE * INFORMATION * * REMARQUE : SI IPCHE1 EST AUX NOEUDS LE PASSAGE DES VALEURS SUR LE * SUPPORT VOULU SE FAIT DANS VALCHE ET/OU VALMEL SAUF DANS * LE CAS DES MATRICE DE HOOKE *_______________________________________________________________________ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMINTE -INC SMMODEL SEGMENT INFO INTEGER INFELL(JG) ENDSEGMENT CHARACTER*(NCONCH) CONCH *--------- Fin des declarations ---------------------- IRET = 0 IRET2 = 9999 MCHELM = IPCHE1 NSOUS = mchelm.ICHAML(/1) N3 = mchelm.INFCHE(/2) *OF : Pour eviter de se poser la question de N3<6 a ce jour. IF (N3.LT.6) THEN write(ioimp,*) 'QUESUP INFCHE(.,N3) N3<6 : N3=',N3,'!' return ENDIF *DBG**OF A partir d'ici N3 est forcement plus grand que 6 ! * Recherche de l'information sur le support stockee dans INFCHE(*,6) ... * Si NSOUS = 0, champ considere constant avec le support recherche ! IF (NSOUS.GT.0) THEN ISUPC = mchelm.INFCHE(1,6) IRET2 = ISUPC DO ISOUS = 2, NSOUS IF (mchelm.INFCHE(ISOUS,6).NE.ISUPC) IRET2 = 9999 ENDDO ELSE ISUPC = ISUP IRET2 = ISUPC ENDIF ISUP1 = ISUPC * si le champ est constant sur l'element quelque soit le * support demande, on est bon ICONST = 1 DO ISOUS = 1, NSOUS MCHAML = mchelm.ICHAML(ISOUS) NCOMP = mchaml.IELVAL(/1) DO ICOMP = 1, NCOMP MELVAL = mchaml.IELVAL(ICOMP) IF (MELVAL.NE.0) THEN IF (mchaml.TYPCHE(ICOMP)(1:8).NE.'POINTEUR') THEN iflag = melval.VELCHE(/1) ELSE iflag = melval.IELCHE(/1) ENDIF IF (iflag.NE.1) ICONST = 0 ENDIF ENDDO ENDDO IF (ICONST.EQ.1) GOTO 666 IFLAG = 0 * * CAS ISUP = 0 * ------------ IF (ISUP.EQ.0) THEN * On a deja : ISUP1 = ISUPC = mchelm.INFCHE(1,6) MINTE = mchelm.INFCHE(1,4) IF (MINTE.NE.0) NBPGAU = minte.POIGAU(/1) DO ISOUS = 1, NSOUS INFCH1 = mchelm.INFCHE(ISOUS,6) MINTE1 = mchelm.INFCHE(ISOUS,4) IF (INFCH1.EQ.1) GOTO 10 IF (MINTE1.EQ.0) GOTO 10 IF (INFCH1.NE.ISUPC) THEN IF (MINTE.NE.MINTE1) THEN NBPGA1 = MINTE1.POIGAU(/1) IF (NBPGAU.NE.NBPGA1) GOTO 2000 ENDIF ENDIF IFLAG=IFLAG+1 10 CONTINUE ENDDO * * TOUTES LES SOUS ZONES DOIVENT ETRE SUR LE BON SUPPORT * IF (IFLAG.EQ.0) GOTO 1000 IF (IFLAG.NE.NSOUS) GOTO 2000 IRET = ISUPC GOTO 666 * * CAS ISUP > 0 * ------------ * DANS CE CAS CE SONT LES ZONES DU MODELE QUI PILOTENT ELSE ISUP1 = ISUP * Cas particulier pour certaines formulations : IF (ISUPC.EQ.6) THEN IF (ISUP.GE.3) ISUP1 = 6 ENDIF * On suppose que le modele est "mono-formulation"... MMODEL = IPMODE NSOUM = mmodel.KMODEL(/1) INBR = 0 DO ISOUM = 1, NSOUM IMODEL = mmodel.KMODEL(ISOUM) MELE = imodel.NEFMOD IF (MELE.EQ.22 .OR. MELE.EQ.259) GOTO 21 IF (ISUP1.EQ.6) THEN ELSE if (imodel.INFMOD(/1).LT.7) THEN ** write(ioimp,*) 'QUESUP : INFMOD(/1) < 8',infmod(/1),2+ISUP1 ** call erreur(5) endif IF (imodel.INFMOD(/1).LT.2+ISUP1) THEN write(ioimp,*) ' QUESUP IMODEL =',imodel,formod(1) IF (IERR.NE.0) THEN IRET = 9999 GOTO 666 ENDIF info = ipinf IPMIN1 = info.INFELL(11) SEGSUP,info ELSE IPMIN1 = imodel.INFMOD(2+ISUP1) ENDIF ENDIF MINTE1 = IPMIN1 NBPGA1 = MINTE1.POIGAU(/1) * * BOUCLE SUR LES ZONES DU CHAMELEM * DO ISOUS=1,NSOUS IPMAIL = mchelm.IMACHE(ISOUS) IF (IPMAIL.NE.imodel.IMAMOD) GOTO 20 CONCH = mchelm.CONCHE(ISOUS) IF (CONCH.NE.imodel.CONMOD) GOTO 20 INFCH = mchelm.INFCHE(ISOUS,6) IF (INFCH.EQ.1) GOTO 20 MINTE = mchelm.INFCHE(ISOUS,4) IF (MINTE.EQ.0) GOTO 20 IF (INFCH.NE.ISUP1) THEN IF (MINTE.NE.MINTE1) THEN NBPGAU = minte.POIGAU(/1) IF (NBPGAU.NE.NBPGA1) GOTO 2000 ENDIF ENDIF IFLAG = IFLAG + 1 INBR = INBR + 1 20 CONTINUE ENDDO 21 CONTINUE ENDDO * * TOUTES LES SOUS ZONES DOIVENT ETRE SUR LE BON SUPPORT * IF (IFLAG.EQ.0) GOTO 1000 IF (IFLAG.EQ.INBR) THEN GOTO 666 ELSE GOTO 2000 ENDIF ENDIF * * IPCHE1 EST AUX NOEUDS 1000 CONTINUE IRET = 1 IF (ISUP.EQ.1) IRET = 0 IF (ICOND.EQ.1.AND.IRET.EQ.1.AND.ISUP.NE.0) GOTO 2000 GOTO 666 * * IPCHE1 EST SUR UN AUTRE SUPPORT QUE CELUI VOULU ET PAS AUX NOEUDS * ==> MESSAGE D'ERREUR POUR QUE L'ON DONNE LE CHAMELEM SUR UN * SUPPORT CORRECT 2000 CONTINUE IF (ISUP.NE.0) THEN MOTERR(1:8)=TITCHE * * LES DIFFERENTS SOUS-ZONES DU CHAMELEM ONT DES POINTS SUPPORTS DIFFERENTS * ELSE ENDIF IRET = 9999 GOTO 666 666 CONTINUE c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales