cfl1
C CFL1 SOURCE OF166741 24/10/07 21:15:06 12016 * *----------------------------------------------------------------------- * * calcul du pas de temps de stabilité operateur CFL * de la vitesse du son operateur CSON * de la taille de propagation de l'information opérateur TAILLE * * en entrée * ipmodl objet model * ipcha1 champ de caractéristiques * ipcha2 champ de vitesse du son composante 'CSON' * ipcha3 champ de taille du maillage composante 'L' ( et 'L2H' facultatif) * icas décrit le cas de figure * entree -------> sortie * = 1 ipcha1 pas de temps cfl * = 2 ipcha2 ( et ipcha1 si cara geom ) " " " * = 3 ipcha3 et ipcha1 " " " * = 4 ipcha1 vitesse du son * = 5 ( et ipcha1 si cara geom ) parametre de taille * en sortie * ipcha4 le champ par element demandé * *----------------------------------------------------------------------- * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC CCGEOME -INC CCREEL -INC SMCHAML -INC SMINTE -INC SMELEME -INC SMRIGID -INC SMMODEL -INC SMCOORD -INC SMLREEL SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT CHARACTER*(NCONCH) CONM CHARACTER*8 CMATE PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*4 CMOT LOGICAL DEUCMP,lsupma *--------------------------------------------------------------------* * call tcloc2(' ',-1,it) deucmp=.FALSE. IF ( ICAS .EQ. 1) THEN IPCHE1 = IPCHA1 IPCHE2 = 0 ELSE IF ( ICAS .EQ. 2 ) THEN IPCHE1 = IPCHA1 IPCHE2 = IPCHA2 ELSE IF ( ICAS .EQ. 3 ) THEN IPCHE1 = IPCHA1 IPCHE2 = IPCHA3 ELSE IF ( ICAS .EQ. 4 ) THEN IPCHE1 = IPCHA1 IPCHE2 = 0 ELSE IF ( ICAS .EQ. 5 ) THEN IPCHE1 = IPCHA1 IPCHE2 = 0 ENDIF MMODEL = IPMODL SEGACT MMODEL NSOUS = KMODEL(/1) * * initialisation de l'objet résultat * N1 = NSOUS N3 = 6 L1 = 16 SEGINI MCHELM IF ( ICAS .LE. 3 .OR. ICAS .GE. 1 ) THEN TITCHE = 'PAS DE TEMPS CFL' ELSE IF ( ICAS .EQ. 4 ) THEN TITCHE = 'VITESSE DU SON' ELSE IF ( ICAS .EQ. 5 ) THEN TITCHE = 'TAILLE CFL' ENDIF IFOCHE = IFOUR *--------------------------------------------------------------------* * * BOUCLE SUR LES ZONES ELEMENTAIRES ( MEME TYPE D'EF ) * *--------------------------------------------------------------------* * DO 500 ISOUS=1,NSOUS IMODEL=KMODEL(ISOUS) SEGACT IMODEL lsupma=.true. * * INITIALISATIONS * IVAM1 = 0 IVAM2 = 0 * MELE = NEFMOD IPMAIL= IMAMOD CONM = CONMOD NFOR = FORMOD(/2) NMAT = MATMOD(/2) * IVAMAT=0 IVACAR=0 NMATR=0 NMATF=0 NCARA=0 NCARF=0 MOCARA=0 MOMATR=0 DESCR=0 IMATRI=0 C C COQUE INTEGREE OU PAS ? NPINT = imodel.INFMOD(1) * * formulation et matériau ( ca peut servir par la suite ) * CMATE = imodel.CMATEE MATE = imodel.IMATEE INAT = imodel.INATUU * * information sur l'élément finis : nécessaire pour les tests * qui donnent les noms de composantes * INTTYP = 2 * MFR = INFELE(13) IELE = INFELE(14) * IPINT = INFELE(11) ipint=infmod(4) * * * Verification de compatibilite de MCHAML du point de vue des * * tableaux INFCHE et creation du tableau INFOS pour COMCHA * IF (IRTD.EQ.0) THEN * incompatibilité entre le modele et le chamelem SEGSUP MCHELM RETURN ENDIF * call tcloc2('Apres ident',6,it) * *--------------------------------------------------------------------* * determination des noms de composantes dans les champs * * on commence par le champ 2 qui n'existe que dans le cas 2 et 3 NOTYPE = MOTYR8 IF (ICAS.EQ.2 .OR.ICAS.EQ.3) THEN IF (ICAS.EQ.2) THEN * le champ 2 contient la vitesse du son NBROBL=1 NBRFAC=0 SEGINI NOMID LESOBL(1)='CSON' ELSE IF(ICAS.EQ.3) THEN * le champ 2 contient le parametre de taille NBROBL=1 NBRFAC=1 SEGINI NOMID LESOBL(1)='L' LESFAC(1) = 'L2H' ENDIF MOTYPE = NOTYPE MOMATR = NOMID * ===> * write(6,*) 'Sous zone' ,isous,' Composante obligatoire ipche2' * write(6,7001) (lesobl(i),i=1,nbrobl) * write(6,*) 'facultatives' * write(6,7001) (lesfac(i),i=1,nbrfac) * 7001 format(4(A4,2X)) * Recherche des valeurs des composantes dans les MELVAL d'un * CHAMELEM. On distingue les composantes obligatoires des * composantes facultatives. SEGSUP,NOMID IF (NOTYPE.NE.MOTYR8) SEGSUP,NOTYPE IF (IERR.NE.0) THEN SEGSUP MCHELM RETURN ENDIF ENDIF * call tcloc2('Apres komcha1',6,it) * * dans les cas 1,2 ou 5 il peut y avoir des caractéristiques geometriques * dans les cas 1,3 ou 4 il y a des caractéristiques matériau * on commence par traiter les caractéristiques matériau IF (ICAS .EQ. 1 .OR. ICAS .EQ. 3 .OR. ICAS .EQ. 4) THEN IF (FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'ISOTROPE') THEN NBROBL=3 NBRFAC=0 SEGINI NOMID MOMATR=NOMID LESOBL(1)='YOUN' LESOBL(2)='NU' LESOBL(3)='RHO' NMATR=NBROBL NMATF=NBRFAC ELSE $ IF (FORMOD(1).EQ.'MECANIQUE'.AND.CMATE.EQ.'UNIDIREC') THEN * indisponible! pour les volontaies voir voir rigi1.eso * SEGSUP MCHELM RETURN ELSE $ IF (FORMOD(1).EQ.'POREUX '.AND.CMATE.EQ.'ISOTROPE') THEN * indisponible! pour les volontaies voir rigi1.eso SEGSUP MCHELM RETURN * ELSEIF(INAT.EQ.67.AND.CMATE.EQ.'ORTHOTRO') THEN * indisponible! pour les volontaies voir rigi1.eso SEGSUP MCHELM RETURN * ELSE if(lnomid(6).ne.0) then nomid=lnomid(6) momatr=nomid nmatr=lesobl(/2) nmatf=lesfac(/2) lsupma=.false. else lsupma=.true. endif ENDIF * * type des composantes * IF (CMATE.EQ.'SECTION') THEN SEGSUP MCHELM SEGDES MMODEL,IMODEL RETURN ELSE MOTYPE=MOTYR8 ENDIF * * dans le cas ou il y des caractéristiques géometriques on augmente * motype * ELSE IF((ICAS.EQ.2 .OR. ICAS.EQ.5).AND.IPCHE1.NE.0)THEN * dans ces cas il faut eventuellement récuperer les caractéristiques * geométriques et avoir initialiser notype avant NBROBL=0 NBRFAC=0 SEGINI NOMID MOMATR=NOMID MOTYPE=MOTYR8 NMATR=NBROBL NMATF=NBRFAC ENDIF * IF((IPCHE1.NE.0).AND.(ICAS.NE.4).AND.(ICAS.NE.3))THEN * * * EPAISSEUR ET EXCENTREMENT DANS LE CAS DES COQUES * IF (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.9) THEN NBROBL=NBROBL+1 IF(MFR.EQ.3.AND.IFOUR.EQ.-2) THEN NBRFAC=NBRFAC+2 ELSE NBRFAC=NBRFAC+1 ENDIF SEGADJ NOMID MOCARA=NOMID LESOBL(NBROBL)='EPAI' LESFAC(NBRFAC)='EXCE' IF(MFR.EQ.3.AND.IFOUR.EQ.-2) THEN LESFAC(NBRFAC-1)='EXCE' LESFAC(NBRFAC)='DIM3' ELSE LESFAC(NBRFAC)='EXCE' ENDIF * * SECTION POUR LES BARRES ET LES CERCES * ELSE IF (MFR.EQ.27) THEN NBROBL=NBROBL+1 SEGADJ NOMID LESOBL(NBROBL)='SECT' * * section, excentrements et orientation pour les barres excentrees * ELSE IF (MFR.EQ.49) THEN NBROBL=NBROBL+6 SEGADJ NOMID LESOBL(NBROBL-5)='SECT' LESOBL(NBROBL-4)='EXCZ' LESOBL(NBROBL-3)='EXCY' LESOBL(NBROBL-2)='VX ' LESOBL(NBROBL-1)='VY ' LESOBL(NBROBL)='VZ ' * * CARACTERISTIQUES POUR LES POUTRES * ELSE IF (MFR.EQ.7 ) THEN NBROBL=NBROBL+4 NBRFAC=NBRFAC+2 SEGADJ NOMID LESOBL(NBROBL-3)='TORS' LESOBL(NBROBL-2)='INRY' LESOBL(NBROBL-1)='INRZ' LESOBL(NBROBL)='SECT' LESFAC(NBRFAC-1)='SECY' LESFAC(NBRFAC)='SECZ' * * CARACTERISTIQUES POUR LES TUYAUX * ELSE IF (MFR.EQ.13) THEN * pour les autres on ne ient pas compte des modification * qui assouplissent le tuyau donc omega max diminue NBROBL=NBROBL+2 SEGADJ NOMID LESOBL(NBROBL-1)='EPAI' LESOBL(NBROBL)='RAYO' ELSE IF (MFR.EQ.39) THEN NBROBL=NBROBL+2 NBRFAC=NBRFAC+2 SEGADJ NOMID LESOBL(NBROBL-1)='EPAI' LESOBL(NBROBL)='RAYO' LESFAC(NBRFAC-1)='RACO' LESFAC(NBRFAC)='PRES' ENDIF * MOMATR=NOMID NMATR=NBROBL NMATF=NBRFAC * * ===> * write(6,*) 'Sous zone' ,isous,' Composante obligatoire ipche1' * write(6,7001) (lesobl(i),i=1,nbrobl) * write(6,*) 'facultatives' * write(6,7001) (lesfac(i),i=1,nbrfac) * ENDIF * IF (NMATR.NE.0) THEN IF (MOTYPE.NE.MOTYR8) SEGSUP NOTYPE nomid=momatr if(lsupma)segsup NOMID IF (IERR.NE.0) THEN SEGSUP MCHELM RETURN ENDIF * call tcloc2('Apres komcha2',6,it) ENDIF * *--------------------------------------------------------------------* * remplissage de la description du sous champ résultat * * dimension * = 2 si taille et coque ou poutre * mfr obtenu par elquoi nous renseigne * IF ((ICAS.EQ.5).AND. & (MFR.EQ.3.OR.MFR.EQ.5.OR.MFR.EQ.7.OR.MFR.EQ.9.OR.MFR.EQ.13)) & THEN DEUCMP = .TRUE. N2 = 2 SEGINI MCHAML NOMCHE(1) = 'L' NOMCHE(2) = 'L2H' TYPCHE(1) = 'REAL*8' TYPCHE(2) = 'REAL*8' ELSE IF (ICAS.EQ.5) THEN N2 = 1 SEGINI MCHAML NOMCHE(1) = 'L' TYPCHE(1) = 'REAL*8' ELSE IF (ICAS.EQ.4) THEN N2 = 1 SEGINI MCHAML NOMCHE(1) = 'CSON' TYPCHE(1) = 'REAL*8' ELSE IF (ICAS.EQ.1.OR.ICAS.EQ.2.OR.ICAS.EQ.3) THEN N2 = 1 SEGINI MCHAML NOMCHE(1) = 'TCFL' TYPCHE(1) = 'REAL*8' ENDIF ICHAML(ISOUS) = MCHAML * * le chamelem est defini au centre de gravité * INFCHE(ISOUS,6) = 2 * il faut brancher sur le segment d'intégration INFCHE(ISOUS,4)=IPINT * nom du constituant CONCHE(ISOUS) = CONMOD * maillage IMACHE(ISOUS) = IPMAIL * a priori info ne set plus * SEGSUP INFO * *--------------------------------------------------------------------* * appel au sous routine spécifiques * * NUMERO DES ETIQUETTES : * Les elements sont groupes comme suit : * - massif,liquide 'surface libre' poreux ----------------------> 4 * - coq3,dkt,coq4,coq8,coq2,dst --------------------------------> 12 * - poutre,tuyau,linespring,tuyau fissure,barre,homogeneise,jot3> 27 * - joi4,joi2,poutre de timoschenko,joi3 29 * * 1 5 0 5 0 GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,12,99, 4, 4, 4, 4,99,99,99, 2 99,99, 4, 4, 4, 4,27,27,29,99,99,99,99,99,99,99,99,99,99,99, 4 27,29,99,27,99,29,12,99,27,99,99,99,99,99,12,27,99,99,99,99, 6 99,99,99,99,99,99,99,99, 4, 4, 4, 4,99,99,99,99,99,99,99,99, 8 99,99,99,29,99,99,99,99,99,99,99,99,27,12,99,99,99,99,99,99, 1 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 2 99,99,99,99,99,99,99),MELE 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(9:12)='CFL1' SEGSUP MCHELM,MCHAML RETURN C C_______________________________________________________________________ C C massif C_______________________________________________________________________ C 4 CONTINUE * write(6,*) 'Appel a cfl2' IF (IERR.NE.0) RETURN GOTO 400 C_______________________________________________________________________ C C ELTS DE RACCORD LIQUIDE SOLIDE RAC2 RACO LIA3 LIA4 LICO LIC4 C PAS DE RIGIDITE C_______________________________________________________________________ C 12 CONTINUE * write(6,*) 'Appel a cfl3' IF (IERR.NE.0) RETURN GOTO 400 C_______________________________________________________________________ C C coq3,dkt,coq4,coq8,coq2,dst C_______________________________________________________________________ C 27 CONTINUE * write(6,*) 'Appel a cfl4' IF (IERR.NE.0) RETURN GOTO 400 C_______________________________________________________________________ C C poutre,barre,homogeneise C poutre de Timoschenko C_______________________________________________________________________ C 29 CONTINUE * write(6,*) 'Appel a cfl5' * ivam1 et 2 sont actifs , ipmail descativé * en sortie melv1 et melv2 sont inactifs IF (IERR.NE.0) RETURN GOTO 400 * 400 CONTINUE * on raccroche le résultat IELVAL(1) = MELV1 IF (DEUCMP) IELVAL(2) = MELV2 SEGDES MCHAML SEGDES IMODEL IF (IVAM1.NE.0) THEN MPTVAL = IVAM1 SEGSUP MPTVAL ENDIF IF (IVAM2.NE.0) THEN MPTVAL = IVAM2 SEGSUP MPTVAL ENDIF * fin boucle sur les sous zone des champs 500 CONTINUE * IPCHA4 = MCHELM SEGDES MCHELM,MMODEL RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales