2017-08-25 2 views
1

J'ai beaucoup de plugins abaqus qui effectuent des actions dans Abaqus CAE via une interface de script. Pour de nombreuses actions après leur exécution, Abaqus exécute des procédures d'actualisation d'affichage qui prennent un certain temps. Si les modèles sont petits et que le script n'en fait pas trop, ça va. Cependant, par exemple un de mes scripts prend une partie et la réplique dans l'assemblage aux coordonnées spécifiées par le fichier CSV de l'utilisateur. Parfois, il peut y avoir jusqu'à 2000 réplications. Dans ce cas, il faut une éternité pour terminer la procédure et la plupart du temps, vous ne voyez que "Réglage de l'affichage ..."Comment supprimer "Réglage de l'affichage ..." dans les scripts Abaqus

De plus, cet affichage "Setting display ..." écrase la progression de vos scripts (jalon), donc c'est difficile pour voir jusqu'où le script avait avancé.

Y at-il un moyen de suspendre ce comportement de mise à jour de l'affichage jusqu'à la fin du script? Peut-être qu'il ya un hack que vous pourriez redéfinir la fonction de mise à jour d'abaqus jusqu'à ce que le script soit terminé ou quelque chose parce que selon le manuel, la seule chose que vous pouvez faire est d'empêcher la mise à jour des couleurs.

Tous les conseils seront appréciés, merci!

EDIT: Pour clarifier, j'utilisé folowing méthodes sur un objet de la fenêtre sans vain:

disableRefresh() 
disableColorCodeUpdates() 

Qu'est-ce que le disableColorCodeUpdates() faire est tout à fait claire et l'avantage est évident lorsque le codage couleur est utilisé dans la fenêtre de modèle. Cependant, je ne vois aucune différence entre utiliser et ne pas utiliser disableRefresh().

EDIT: Désolé pour une si longue attente, seulement maintenant j'ai eu la chance de revenir à abaqus. Voici un simple exemple de script qui prend une part et la place dans le montage:

import random 
modelName='Model-1' 
partName='Part-1' 
noInst=1000 

i = 0 
lists = [] 
for i in range(noInst): 
    lists.append([random.random()*10,random.random()*10,random.random()*10]) 

totalParts = len(lists) 
session.Viewport(name='Viewport: 2', origin=(6.63750028610229, 
     20.7638893127441), width=335.746887207031, height=149.77685546875) 
session.viewports['Viewport: 2'].makeCurrent() 
session.viewports['Viewport: 2'].maximize() 
session.viewports['Viewport: 1'].restore() 

for n,l in enumerate(lists): 
    milestone('Replicating parts', 'parts', n+1, totalParts) 
    a = mdb.models[modelName].rootAssembly 
    p = mdb.models[modelName].parts[partName] 
    a.Instance(name='Random_'+'-'+str(n), part=p, dependent=ON) 
    a = mdb.models[modelName].rootAssembly 
    a.translate(instanceList=('Random_'+'-'+str(n),), vector=(float(l[0]), float(l[1]), float(l[2]))) 

Si je tente de créer un objet de la fenêtre sans spécifier objet affiché. Viewport utilise par défaut l'objet affiché courant dans la fenêtre d'affichage initiale. J'ai remarqué que si je change un module d'un assemblage à un autre par ex. En partie, je gagne en amélioration de la vitesse, mais cela suppose que la pièce est suffisamment vide. Si j'ai un modèle avec des parties qui sont grandes et complexes, il est encore plutôt lent sur "réglage de l'affichage .." aussi mon jalon est écrasé par "réglage de l'affichage .." en tout cas.

+0

pouvez-vous afficher un exemple de script simple?Je fais beaucoup de scripts os abaqus et je n'ai jamais vu "setting display" – agentp

+0

Que se passe-t-il si vous créez et basculez vers une nouvelle fenêtre, sans spécifier un objet affiché? –

+0

qu'est-ce que «milestone»? – agentp

Répondre

2

Je pense que je l'ai déjà vu dans une situation similaire, où je créais des éléments un par un dans une session GUI CAE. Je ne pouvais pas comprendre comment désactiver le rafraîchissement de l'écran, et il était follement lent. Il y avait deux solutions de contournement:

1. Utilisez une autre commande, si l'on existe, qui crée de nombreux éléments à la fois. Dans mon exemple ci-dessus, au lieu de créer chaque nouvel élément un à la fois en utilisant la méthode Element, j'ai été capable de générer une partie entière et le maillage en une fois avec makePartFromNodesAndElements qui était significativement plus rapide. Dans votre cas, il pourrait être possible de faire quelque chose de similaire.

2. Si vous n'avez pas besoin d'une interface graphique active, exécutez le script à partir du shell système: abaqus cae noGui=script.py. Vous pouvez même passer des arguments au script à partir de l'interface de ligne de commande.

Une autre possibilité (non testée) que je viens de penser est que vous pouvez créer et passer à une nouvelle fenêtre sans spécifier l'objet affiché. Ensuite, essayez votre code et voir si cela accélère les choses.

+0

1. Je n'ai trouvé aucune commande alternative pour la fonction; 2. Ce n'est pas une option car le code fait partie du plugin pour faciliter la modélisation dans l'assemblage; 3. Je l'ai essayé et la nouvelle fenêtre créée est par défaut l'objet courant. Cependant, j'ai remarqué que j'obtiens une amélioration de la vitesse si je passe au module Pièce. – UN4