cfl1
C CFL1 SOURCE OF166741 25/02/21 21:15:27 12166
*
*-----------------------------------------------------------------------
*
* 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
-INC TMPTVAL
SEGMENT NOTYPE
CHARACTER*16 TYPE(NBTYPE)
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