Welcome to the forums. Please post in English or French.

You are not logged in.

#1 2021-10-04 11:26:27

Romuald
Member
From: France, Lille
Registered: 2020-06-24
Posts: 20

STAT_NON_LIN : écrire résultats même si dernier pas non convergé?

Bonjour,

Un des problèmes récurrents de la non convergence est de comprendre pourquoi un calcul ne converge pas à un pas de temps donnée (P). Je relance alors le calcul jusqu'au pas précédemment convergé (P-1) pour comprendre ce qui se passe. C'est très utile mais assez long.
J'ai essayé, sans succès évidemment, de trouver une option permettant d'écrire les résultats convergés même si le calcul échoue.
Est-ce possible? Si oui, comment?

Merci par avance,

Offline

#2 2021-10-04 15:09:15

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 3,674

Re: STAT_NON_LIN : écrire résultats même si dernier pas non convergé?

bonjour

simplelistr = DEFI_LIST_REEL(
	DEBUT=0.0,
	INTERVALLE=(
		_F(JUSQU_A=1.0,NOMBRE=10),
		_F(JUSQU_A=2.0,NOMBRE=100),
		_F(JUSQU_A=2.8,NOMBRE=8),
		#_F(JUSQU_A=3.0,NOMBRE=1),
	),
);

quand on détecté ou cela s'arrète

il y a plus "propre"

jean pierre aubry


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#3 2021-10-04 17:09:59

jeanpierreaubry
Guru
From: nantes (france)
Registered: 2009-03-12
Posts: 3,674

Re: STAT_NON_LIN : écrire résultats même si dernier pas non convergé?

une autre possibilité est

SOLVEUR=_F(....
STOP_SINGULIER='NON'
....

on n'a pas besoin de savoir le moment où l'erreur se produit


consider reading my book
freely available here https://framabook.org/beginning-with-code_aster/

Offline

#4 2021-10-07 09:37:49

Romuald
Member
From: France, Lille
Registered: 2020-06-24
Posts: 20

Re: STAT_NON_LIN : écrire résultats même si dernier pas non convergé?

Ce n'est pas exactement ce que j'avais en tête. Mais merci, le STOP_SINGULIER est intéressant dans certain oui.

Lorsqu'un calcul échoue durant la convergence, il peut s'arrêter à un pas de calcul non connu à l'avance.
Pour comprendre qui se passe, on peut vouloir étudier les résultats jusqu'au dernier convergé. Il faut donc relancer le calcul en le stoppant "manuellement" via le "end step time". Cela nécessite donc de relancer le calcul.
J'utilisais un autre code de calcul par le passé qui permettait de toujours écrire les résultats même si le calcul plantait. Je me demandais donc si une option similaire existait.

Offline

#5 2021-10-07 13:59:19

Ect
Member
From: Switzerland
Registered: 2008-05-15
Posts: 103

Re: STAT_NON_LIN : écrire résultats même si dernier pas non convergé?

Hello,

Normalement on peut s'en sortir en gérant l'erreur avec python:

DEBUT(PAR_LOT='NON',);
... 

try:
    resnl=STAT_NON_LINE(...
    )
except aster.NonConvergenceError, message:
    print 'Convergence not reached. Exiting...'
except aster.MatriceSinguliereError, message:
    print 'Singular matrix. Exiting...'
except aster.error, message:
    print 'Error raised. Exiting...'

IMPR_RESU(...)

Une autre possibilité est de passer par une boucle qui fait chaque incrément, avec reuse et etat_init, avec un impr_resu par incrément. Désavantage: il faut renommer et déplacer le fichier fort.80 (par exemple) une fois par incrément, avantage: on peut post-processer en cours de calcul.

for ii,temps in enumerate(tps[1:]):
	if ii==0:
		resnl=STAT_NON_LINE(
                    ...
                    INCREMENT=_F(LIST_INST=autostep, INST_FIN=float(temps),),
                )
	else:
		resnl=STAT_NON_LINE( reuse=resnl,
                    INCREMENT=_F(LIST_INST=autostep,INST_FIN=float(temps),),
		    ETAT_INIT=_F(EVOL_NOLI=resnl, INST=float(tps[ii])),
                )
	IMPR_RESU(UNITE=80 ...)
	DEFI_FICHIER(ACTION='LIBERER',UNITE=80)
	shutil.move('fort.80',('/path/to/your/directory/%3.5f.rmed' % temps))

Bon courage !
Ect

Offline