--- /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=%_PYGMEE_TAILLE%
+
+# 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)*%_ASTER_CONDUCTIVITE_M%+(alpha)*%_ASTER_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();