From 5ddf1711036cb3b601f22353d65e71e9af644d2e Mon Sep 17 00:00:00 2001 From: Charles Toulemonde Date: Tue, 26 Oct 2010 14:55:06 +0000 Subject: [PATCH] debug of s_polymers_st_1 --- .../s_polymers_st_1/benhur_template.txt | 28 +++ .../s_polymers_st_1_aster_template.comm | 203 ++++++++++++++++++ .../s_polymers_st_1_aster_template.export | 36 ++++ MAP/prefs_MAP.py | 7 +- MAP/s_polymers_st_1_V1.py | 2 +- generator/generator_s_polymers_st_1.py | 83 ++++++- 6 files changed, 354 insertions(+), 5 deletions(-) create mode 100644 MAP/Templates/s_polymers_st_1/benhur_template.txt create mode 100644 MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.comm create mode 100644 MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.export diff --git a/MAP/Templates/s_polymers_st_1/benhur_template.txt b/MAP/Templates/s_polymers_st_1/benhur_template.txt new file mode 100644 index 00000000..a9cb8691 --- /dev/null +++ b/MAP/Templates/s_polymers_st_1/benhur_template.txt @@ -0,0 +1,28 @@ +OPTIONS +3D BENHUR SCALE +I - Morphologie (MESSALA) +1) dimension du VER cubique [m] (entree) +%_RVE_SIZE% +2) fraction volumique seuil écrétant le fuseau (entree) +.11 +3) fichier decrivant le fuseau granulaire descendant (entree) +- +4) fichier decrivant la position et la taille des boules (sortie) +%_INCLUSION_FILE% +5) fichier CAO de la morphologie (sortie) +- +6) facteur de correction de fraction volumique (entree) +1.0 + +II - Maillage (BENHUR) +1) fichier entree décrivant le maillage support (entree) +%_PATH_BENHUR%/bin/regular_mesh_3D_%_MESH_SIZE%.msh +2) fichier sortie du maillage (sortie) +%_PATH_STUDY%/%_NAME_SCHEME%_benhur_%_MESH_SIZE%.msh +3) fichier commentaire sur les statistiques décrivant le maillage (sortie) +%_PATH_STUDY%/%_NAME_SCHEME%_benhur_%_MESH_SIZE%.log +4) fichier BMP décrivant une coupe binarisée du VER (sortie) +%_PATH_STUDY%/%_NAME_SCHEME%_benhur_%_MESH_SIZE%.bmp +5) fichier TXT donnant la level set du contour aux noeuds (sortie) +%_PATH_STUDY%/%_NAME_SCHEME%_benhur_%_MESH_SIZE%_levelset.txt + diff --git a/MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.comm b/MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.comm new file mode 100644 index 00000000..f343fdc5 --- /dev/null +++ b/MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.comm @@ -0,0 +1,203 @@ +#=========================================== +# 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(); diff --git a/MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.export b/MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.export new file mode 100644 index 00000000..44270887 --- /dev/null +++ b/MAP/Templates/s_polymers_st_1/s_polymers_st_1_aster_template.export @@ -0,0 +1,36 @@ +P serveur localhost +P version %_ASTER_VERSION% +P lang fr +P debug debug +P mode interactif +P ncpus 1 +P mpi_nbcpu 1 +P mpi_nbnoeud 1 +P classe +P depart +P distrib +P flashdir +P exectool +P nomjob %_NAME_STUDY% +P origine ASTK 1.8.0 +A args +A memjeveux 218.75 +P mem_aster 100.0 +A tpmax 3600 +P memjob 1792000 +P tpsjob 60 +P follow_output yes +P nbmaxnook 5 +P cpresok RESNOOK +P facmtps 1 +P corefilesize unlimited +F comm %_PATH_STUDY%/s_polymers_st_1_aster.comm D 1 +F msh %_PATH_STUDY%/s_polymers_st_1_benhur_%_MESH_SIZE%.msh D 19 +F resu %_PATH_STUDY%/s_polymers_st_1_aster.resu R 8 +F mess %_PATH_STUDY%/s_polymers_st_1_aster.mess R 6 +F erre %_PATH_STUDY%/s_polymers_st_1_aster.erre R 9 +F msh %_PATH_STUDY%/s_polymers_st_1_aster.resu.msh R 37 +F med %_PATH_STUDY%/s_polymers_st_1_aster.resu.med R 38 +P consbtc oui +P soumbtc oui +P actions make_etude diff --git a/MAP/prefs_MAP.py b/MAP/prefs_MAP.py index f864b1ff..6602c33d 100644 --- a/MAP/prefs_MAP.py +++ b/MAP/prefs_MAP.py @@ -32,12 +32,13 @@ initialdir=REPINI # INSTALLDIR sert à localiser l'installation d'Eficas INSTALLDIR=os.path.join(REPINI,'..') PATH_MAP="/local/noyret/MAP/" -PATH_PYGMEE=PATH_MAP+"/components/pygmee_v1" +PATH_PYGMEE=PATH_MAP+"/components/pygmee_v2" PATH_BENHUR=PATH_MAP+"/components/benhur" PATH_FDVGRID=PATH_MAP+"components/fdvgrid/ther2d/bin" PATH_MODULE=PATH_MAP+"/modules/polymers" -PATH_STUDY=PATH_MAP+"/studies/demonstrateur_poly_st1" -PATH_ASTER="/local/noyret/bin/Aster10/bin" +PATH_STUDY=PATH_MAP+"/studies/demonstrateur_s_polymers_st_1" +#PATH_ASTER="/local/noyret/bin/Aster10/bin" +PATH_ASTER="/local00/aster" PATH_GMSH="/usr/bin" diff --git a/MAP/s_polymers_st_1_V1.py b/MAP/s_polymers_st_1_V1.py index c345db10..d3ce44c6 100644 --- a/MAP/s_polymers_st_1_V1.py +++ b/MAP/s_polymers_st_1_V1.py @@ -5,7 +5,7 @@ ## -------------------------------------------------- # from Accas import * -from prefs_Map import PATH_MODULE +from prefs_MAP import PATH_MODULE class Tuple: def __init__(self,ntuple): self.ntuple=ntuple diff --git a/generator/generator_s_polymers_st_1.py b/generator/generator_s_polymers_st_1.py index 77a2baaa..d8600040 100644 --- a/generator/generator_s_polymers_st_1.py +++ b/generator/generator_s_polymers_st_1.py @@ -132,6 +132,8 @@ class s_poly_st_1Generator(MapGenerator): return "" def METHODE(self,execution) : + self.config.PATH_STUDY=self.config.PATH_MAP+"/studies/demonstrateur_s_polymers_st_1" + print "self.config.PATH_STUDY has been forced to :", self.config.PATH_STUDY self.dicoMETHODE=self.dictMCVal["METHODE"] print "_____________________" print self.dicoMETHODE @@ -146,6 +148,7 @@ class s_poly_st_1Generator(MapGenerator): self.inclusion_name=self.config.PATH_STUDY+"/pygmee_v2_test_1.inclusions" self.rve_name=self.config.PATH_STUDY+"/pygmee_v2_test_1.rve" pygmee_v2_input=self.config.PATH_STUDY+"/pygmee_v2.input" + print "pygmee_v2_input =", pygmee_v2_input parameter=MAP_parameters() parameter.add_component(composant) parameter.add_parameter(composant, 'rve_size', self.size) @@ -169,10 +172,11 @@ class s_poly_st_1Generator(MapGenerator): self.contrast=float(self.dicoMATERIAUX['_MATERIAUX_CONDUCTIVITE_I']/self.dicoMATERIAUX['_MATERIAUX_CONDUCTIVITE_M']) choix=self.dicoMETHODE['_METHODE_CHOIX'] + finesse=int(self.dicoDISCRETISATION['_DISCRETISATION_FINESSE']) + if (choix=="FD+grid") : commande+= "echo 'execution de FDVGRID';\n" commande+= "cd "+self.config.PATH_FDVGRID+";\n" - finesse=int(self.dicoDISCRETISATION['_DISCRETISATION_FINESSE']) if (finesse<32): finesse=32 commande+= "echo "+str(self.size)+" > "+"rve.input"+";\n" @@ -183,6 +187,83 @@ class s_poly_st_1Generator(MapGenerator): if (choix=="FEM+mesh") : print "option Code_Aster" + commande+= "echo 'execution de BENHUR';\n" + + #Lecture du fichier a trous + print "name_SCHEME =", self.config.NAME_SCHEME + monFichierInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.config.NAME_SCHEME+"/benhur_template.txt" + monFichierOutput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"_benhur_"+str(finesse)+".bhr" + + f = file(monFichierInput) + string_0 = f.read() + f.close() + # find and replace with CONFIG idctionnary + string_1=self.remplaceCONFIG(string_0,CONFIGliste) + dicoBenhur=dict() + dicoBenhur["_RVE_SIZE"]=self.size + dicoBenhur["_MESH_SIZE"]=finesse + dicoBenhur["_INCLUSION_FILE"]=self.inclusion_name + # find and replace with BENHUR idctionnary + string_2=self.remplaceDICO(string_1,dicoBenhur) + # write into ouput file + f=open(monFichierOutput,'wb') + f.write(string_2) + f.close() + # launch of BENHUR on the previous file + commande=commande + "cd "+self.config.PATH_BENHUR+"/bin;\n" + #commande=commande + "./benhur -i "+monFichierOutput+";\n" + commande=commande + "echo 'fin execution de BENHUR';\n" + + commande+= "echo 'execution de CODE_ASTER';\n" + monFichierCommInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.config.NAME_SCHEME+"/s_polymers_st_1_aster_template.comm" + monFichierExportInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.config.NAME_SCHEME+"/s_polymers_st_1_aster_template.export" + + monFichierCommOutput=self.config.PATH_STUDY+"/s_polymers_st_1_aster.comm" + monFichierExportOutput=self.config.PATH_STUDY+"/s_polymers_st_1_aster.export" + # Lecture du fichier a trous a pour le fichier export + f = file(monFichierExportInput) + string_0 = f.read() + f.close() + # find and replace with CONFIG dictionnary + string_1=self.remplaceCONFIG(string_0,CONFIGliste) + # find and replace with CODE_ASTER dictionnary + dicoAster=dict() + dicoAster["_MESH_SIZE"]=finesse + dicoAster["_ASTER_VERSION"]="STA10" + dicoAster["_NAME_STUDY"]="s_polymers_st_1" + string_2=self.remplaceDICO(string_1,dicoAster) + # write into output file + f=open(monFichierExportOutput,'wb') + f.write(string_2) + f.close() + + # Lecture du fichier a trous a pour le fichier comm + f = file(monFichierCommInput) + string_0 = f.read() + f.close() + # find and replace with CONFIG dictionnary + string_1=self.remplaceCONFIG(string_0,CONFIGliste) + # find and replace with CODE_ASTER dictionnary + dicoAster=dict() + dicoAster["_RVE_SIZE"]=self.size + dicoAster["_CONDUCTIVITE_I"]=self.dicoMATERIAUX["_MATERIAUX_CONDUCTIVITE_I"] + dicoAster["_CONDUCTIVITE_M"]=self.dicoMATERIAUX["_MATERIAUX_CONDUCTIVITE_M"] + string_2=self.remplaceDICO(string_1,dicoAster) + # write into output file + f=open(monFichierCommOutput,'wb') + f.write(string_2) + f.close() + + # launch of CODE_ASTER on the study + commande="cd "+self.config.PATH_STUDY+";" + commande=commande + self.config.PATH_ASTER + "/as_run "+monFichierExportOutput +";\n" + commande=commande + "echo 'fin execution de CODE_ASTER';\n" + + print commande + + return commande + + print "METHODE Ok" print "_____________________\n" return commande -- 2.39.2