Cassiopee Forum
CFD python modules
S'il vous plaît connectez vous ou Enregistrement'.
Date et heure en ce moment : lundi, 20 novembre 2017, 20:06

Nouvelle discussion | Répondre
Cassiopee Forum :: Discussions, suggestions, bug report :: Converter :: [Résolu] Maillage et champ dans deux fichiers différents  ::
LucasPascal
Newbie
Image


Messages: 6
[Résolu] Maillage et champ dans deux fichiers différents (vendredi, 3 juillet 2015, 14:41) citation  
Bonjour,

Je débute dans l'utilisation de Cassiopee. Ce que je souhaite faire ne parait pas compliqué mais je ne comprends pas tellement comment m'y prendre. La problématique est à cheval entre Converter et Post.

J'ai un premier fichier nommé filename_mesh qui contient un maillage d'un simple bloc au format bintp (variables x y z).
J'ai un deuxième fichier qui correspond à la solution aux centres des cellules de ce maillage (variables x y z ro rou rov row roE).

J'aimerais simplement calculé la norme de la vorticité aux centres des cellules. Au final, j'ai bien compris que je dois faire :

import Post as P
rot_U = P.computeExtraVariable(data, 'VorticityMagnitude')

Mais comment construire cet objet data ?

EDIT: Si j'ai bien compris, il me faut en fait interpoler ma solution sur mon maillage (aux nœuds) pour pouvoir ensuite utiliser computeExtraVariable. Mais cela ne va pas provoquer des problèmes sur le bord de mon domain ?

Lucas

Ip enregistré Statut: déconnecté Profil | Site Web 
Ordre des réponses: Première réponse en dernier :: Première réponse en premier
ChristopheBenoit
Administrator
Image


Messages: 169
RE: Maillage et champ dans deux fichiers différents (jeudi, 2 juillet 2015, 11:32) citation  
Bonjour,

Voici un petit morceau de code pour ajouter un champ aux centres à des coordonnees :

import Converter.PyTree as C
import Post.PyTree as P
import Converter.Internal as Internal

mesh = C.convertFile2PyTree('mesh.plt') # Lit les coords en noeuds
data = C.convertFile2PyTree('sol.plt') # Lit les champs en centres (var conservatives)

# Je suppose que les zones sont dans le meme ordre dans les deux fichiers
# Ajoute la solution en centres dans mesh
mesh = C.cpVars(data, 'Density', mesh, 'centers:Density')
mesh = C.cpVars(data, 'MomentumX', mesh, 'centers:MomentumX')
mesh = C.cpVars(data, 'MomentumY', mesh, 'centers:MomentumY')
mesh = C.cpVars(data, 'MomentumZ', mesh, 'centers:MomentumZ')
mesh = C.cpVars(data, 'EnergyStagnationDensity', mesh, 'centers:EnergyStagnationDensity')

# hack because of bug in R4 (GridLocation is missing)
nodes = Internal.getNodesFromName(mesh, 'FlowSolution#Centers')
for n in nodes: Internal._createUniqueChild(n, 'GridLocation', 'GridLocation_t', 'CellCenter')

# Vorticity
mesh = P.computeExtraVariable(mesh, 'VorticityMagnitude')
C.convertPyTree2File(mesh, 'out.cgns')

a+


Ip enregistré Statut: déconnecté Profil | Site Web 
LucasPascal
Newbie
Image


Messages: 6
RE: Maillage et champ dans deux fichiers différents (jeudi, 2 juillet 2015, 13:31) citation  
Merci beaucoup !

Pour info (pour les autres débutants), j'ai du enlever le "_" de "_createUniqueChild". J'ai aussi remplacé "VorticityMagnitude" par "centers:VorticityMagnitude".

Puis je récupère la vorticité en faisant :
zonename = C.getZoneNames(mesh)
rot_U = C.convertPyTree2Array(zonename[0]+"/FlowSolution#Centers/VorticityMagnitude", mesh)


Pour info, je venais de trouver une solution bien moins élégante (il n'y a qu'une seule zone) :


import Post.PyTree as P
import Converter as Conv
import Converter.PyTree as C

#===========
# Read data:
#===========
#
# Read mesh
#
mesh = C.convertFile2PyTree(filename_mesh,'bin_tp')
t = mesh[2][1][2][0]

#
# Set variables
#
array_data = Conv.convertFile2Arrays(filename_data,format='bin_tp')[0]
for varname in ['ro','rou','rov','row','roE']:
  t = C.initVars(t, 'centers:'+varname , 1.)
  var = Conv.extractVars(array_data,[varname])
  var, trash = myElsa.Cassiopee2array(var) # NB: conversion en tableau de dimension nvar x ni x nj x nk
  t[2][2][2][-1][1] = var

#=================
# Compute vorticy:
#=================
t = P.computeExtraVariable(t, 'centers:VorticityMagnitude')
rot_U = t[2][2][2][-1][1]

Ip enregistré Statut: déconnecté Profil | Site Web 
Nouvelle discussion | Répondre

Software PBLang 4.65 © 2002-2003 by Martin Senftleben
Image