+++ /dev/null
-#===========================================
-# 20090416 jsn
-# cas test thermique : cube homogene isotrope
-# soumis a un -gradT homogene au contour qcq (donne par ses 3 composantes mg1,mg2,mg3)
-# les champs sont sortis au format gmsh
-# les moyennes des champs de gradient de temperature et de flux de chaleur sont calcules
-#
-# teste en STA9.4
-#============================================
-
-# nbre de classes (de 0% a 100% d'inclusions)
-nb_classes=11
-# specifier le repertoire dans lequel on trouve "entree_schema.dat", "entree_cl.dat" et dans lequel on ecrit "sortie_resultats.dat"
-racine="%_PATH_MODULE%/s_poly_st_1/"
-# nb_classes lignes de float : les lambda donnes par le schema pour la fraction d'incl de chaque classe (de 0% incl a 100% incl tous les N% selon nb_classes)
-fic_entree_schema =racine+"s_poly_st_1_aster.mat"
-
-# cote cube
-L=%_RVE_SIZE%
-
-# conductivite isotrope
-lambd=1.
-# -gradT homogene au contour
-mg1=1.0
-mg2=0.0
-mg3=0.0
-# nbre de classes (de 0% a 100% d'inclusions)
-nb_classes=11
-# lecture schema = lambda pour chaque classe
-lambda_t = [0.0]*nb_classes
-print("'\n")
-for i in range(0,nb_classes):
- alpha=float((i-1)/(nb_classes-1))
- lambda_t[i]=(1-alpha)*%_CONDUCTIVITE_M%+(alpha)*%_CONDUCTIVITE_I%
-
-DEBUT(PAR_LOT='OUI',); # 'OUI' evite l'alarme
-
-# lecture maillage format gmsh
-PRE_GMSH();
-mail=LIRE_MAILLAGE();
-
-# definition des gpes de mailles (surfaces de type 'xp' (x=L) ,'xm' (x=0),... et volume 'vol' regroupant toutes les mailles)
-GMsur_gmsh_noms = ['GM1001', 'GM1002', 'GM1003', 'GM1004', 'GM1005', 'GM1006',]
-GMsur_aster_noms = ['xm', 'xp', 'ym', 'yp', 'zm', 'zp',]
-GMsur_aster_list = [ _F(NOM=GMsur_aster_noms[i],GROUP_MA=GMsur_gmsh_noms[i],) for i in range(0,len(GMsur_gmsh_noms)) ]
-
-GMvol_gmsh_noms = ['GM10000', 'GM10100', 'GM10200', 'GM10300', 'GM10400', 'GM10500', 'GM10600', 'GM10700', 'GM10800', 'GM10900', 'GM11000',]
-GMvol_aster_nom = 'vol'
-GMvol_aster_list = [ _F(NOM=GMvol_aster_nom,UNION=GMvol_gmsh_noms) ]
-
-mail=DEFI_GROUP(reuse =mail,
- MAILLAGE=mail,
- CREA_GROUP_MA=GMsur_aster_list+GMvol_aster_list,);
-
-# definition d'1 groupe de noeuds contenant le nd en (0,0,0)->nd0 afin de fixer la temperature en un point (supprimer les "mvts de corps rigide") ds le cas de CL en flux homogene au contour
-# definition par intersection des faces du cube
-mail=DEFI_GROUP(reuse =mail,
- MAILLAGE=mail,
- CREA_GROUP_NO=(_F(GROUP_MA=('xm','xp','ym','yp','zm','zp',),
- CRIT_NOEUD='TOUS',),
- ),);
-mail=DEFI_GROUP(reuse =mail,
- MAILLAGE=mail,
- CREA_GROUP_NO=(_F(NOM='nd0',
- INTERSEC=('xm','ym','zm',),),
- ),);
-
-# on s'assure que sur la frontiere du cube la normale soit bien sortante
-mail = MODI_MAILLAGE(reuse =mail,
- MAILLAGE=mail,
- ORIE_PEAU_3D=_F(GROUP_MA=('xm','xp','ym','yp','zm','zp',),),
- );
-
-# modele : thermique 3D (affecte a toutes les mailles)
-modl=AFFE_MODELE(MAILLAGE=mail,
- AFFE=_F(TOUT='OUI',
- PHENOMENE='THERMIQUE',
- MODELISATION='3D',),);
-
-# materiau unique (cube homogene)
-mat=DEFI_MATERIAU(THER=_F(LAMBDA=lambd,
- RHO_CP=1,),);
-
-# definition materiaux mat[0] (0% incl) a mat[nb_classes-1] (100% incl)
-mat_t=[0.]*nb_classes
-for i in range(0,nb_classes):
- mat_t[i]=DEFI_MATERIAU(THER=_F(LAMBDA=lambda_t[i],
- RHO_CP=1,),);
-
-# affectation de chaque materiau au groupe de mailles correspondant, si celui ci existe
-affe_mater_list = [ _F(GROUP_MA=GMvol_gmsh_noms[i], MATER=mat_t[i],) for i in range(0,nb_classes) ]
-
-chmat=AFFE_MATERIAU(MAILLAGE=mail,
- AFFE=affe_mater_list,);
-
-#chmat=AFFE_MATERIAU(MAILLAGE=mail,
-# AFFE=_F(GROUP_MA='vol', MATER=mat,),);
-
-# preparation CL en -gradT homogene au contour (composantes mg1,mg2,mg3)
-# T = - (mg1*x + mg2*y + mg3*z)
-# ne depend que de 2 variables d'espace sur chaque face du cube, et de plus lineairement => utilisation de nappes
-l_temp=[]
-nap=[None]*6
-mg=[mg1,mg2,mg3]
-var = ['X','Y','Z']
-l_gma=[['zm','zp'],['xm','xp'],['ym','yp']] # groupes de mailles identifiant les 6 faces du cube
-for i in range(0,3):
- par1 = var[(1+i)%3] # 1er parametre nappe
- par2 = var[(0+i)%3] # 2e parametre nappe
- val00 = 0 # valeur prise lorsque par1=0, par2=0
- val01 = -(mg[(0+i)%3]*L) # valeur prise lorsque par1=0, par2=L
- val10 = -(mg[(1+i)%3]*L) # valeur prise lorsque par1=L, par2=0
- val11 = -(mg[(0+i)%3]*L+mg[(1+i)%3]*L) # valeur prise lorsque par1=L, par2=L
- for j in range(0,2):
- nap[i*2+j] = DEFI_NAPPE ( NOM_PARA = par1, PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
- PARA = (0, L),
- NOM_PARA_FONC = par2,
- DEFI_FONCTION = (
- _F( PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
- VALE =(0,val00 , L,val01),
- ),
- _F( PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
- VALE =(0,val10 , L,val11),
- ),
- )
- )
- l_temp.append( _F(GROUP_MA=(l_gma[i][j],), TEMP=nap[i*2+j],) )
- # passage de la face - a la face + :
- val00 += -(mg[(2+i)%3]*L)
- val01 += -(mg[(2+i)%3]*L)
- val10 += -(mg[(2+i)%3]*L)
- val11 += -(mg[(2+i)%3]*L)
-
-# affectation CL en -gradT homogene au contour
-climites=AFFE_CHAR_THER_F(MODELE=modl,
- TEMP_IMPO= l_temp )
-
-# resolution F=K.u
-resther = THER_LINEAIRE(MODELE=modl,
- CHAM_MATER=chmat, # caracteristiques materiau
- EXCIT=(_F(CHARGE=climites),), # chargement (ici seulement des cl)
- );
-
-# calcul flux chaleur aux points de gauss
-resther=CALC_ELEM(reuse =resther,
- RESULTAT=resther,
- OPTION='FLUX_ELGA_TEMP',);
-
-###############################
-# DEBUT calcul champ (- gradient de temperature) en passant par un materiau homogene fictif de conductivite 1 (suggestion de JM Proix, voir fiche rex aster 13175)
-matfict=DEFI_MATERIAU(THER=_F(LAMBDA=1,
- RHO_CP=1,),);
-cmatfict=AFFE_MATERIAU(MAILLAGE=mail,
- AFFE=_F(TOUT='OUI', MATER=matfict,),);
-resmgrad=CALC_ELEM(RESULTAT=resther,
- OPTION='FLUX_ELGA_TEMP',
- CHAM_MATER=cmatfict);
-# FIN calcul champ (- gradient de temperature) en passant par un materiau homogene fictif de conductivite 1 (suggestion de JM Proix, voir fiche rex aster 13175)
-# dans m_gradm le champ de flux de chaleur est en fait egal au champ de (- grad T)
-###############################
-
-# impression resultats format gmsh : champs de temperature, flux, gradient de temperature
-IMPR_RESU( MODELE=modl,
- FORMAT='GMSH',
-# FORMAT='MED',
- UNITE=37,
- RESU=(_F(RESULTAT = resther,),
- _F(RESULTAT = resmgrad,
- NOM_CHAM='FLUX_ELGA_TEMP',
- NOM_CMP=('FLUX','FLUY','FLUZ',),)
- ));
-
-IMPR_RESU(
- FORMAT='MED',
- UNITE=38,
- RESU=(_F(RESULTAT = resther,),
- _F(RESULTAT = resmgrad,
- NOM_CHAM='FLUX_ELGA_TEMP',
- NOM_CMP=('FLUX','FLUY','FLUZ',),)
- ));
-
-# calcul integrale et moyenne du flux de chaleur sur l'ensemble du cube
-fluxmtot = POST_ELEM(INTEGRALE=_F(GROUP_MA='vol',
- NOM_CHAM='FLUX_ELGA_TEMP',
- NOM_CMP=('FLUX','FLUY','FLUZ',),),
- MODELE=modl,
- RESULTAT=resther,);
-# idem moyenne du gradient de temperature
-m_gradm = POST_ELEM(INTEGRALE=_F(GROUP_MA='vol',
- NOM_CHAM='FLUX_ELGA_TEMP',
- NOM_CMP=('FLUX','FLUY','FLUZ',),),
- MODELE=modl,
- RESULTAT=resmgrad,);
-
-# impression des flux moy
-IMPR_TABLE(TABLE=fluxmtot,
- NOM_PARA=('VOL','MOYE_FLUX','MOYE_FLUY','MOYE_FLUZ',),);
-# et moy du grad de temperature
-IMPR_TABLE(TABLE=m_gradm,
- NOM_PARA=('VOL','MOYE_FLUX','MOYE_FLUY','MOYE_FLUZ',),);
-
-# fin de l'execution
-FIN();