-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GlobalConvergenceHistory is not updated #14
Comments
Hi Luis, |
Hi Stéphanie, Thank you for your answer. I tried what you suggest, but nit = 100; time = 0
time_step = Internal.getNodeFromName(t, 'time_step')
time_step = Internal.getValue(time_step)
for it in range(nit):
FastS._compute(t, metrics, it, tc)
if it%modulo_verif == 0:
FastS._displayTemporalCriteria(t, metrics, it, format='store', gmres=None, verbose='firstlast', stopAtNan=True)
time += time_step |
Hi Luis, Once Ivan commits his edits, I'll correct the function that computes the global residuals. def _calc_global_convergence(t):
var_list_L2 =['RSD_L2','RSD_L2_diff']
var_list_Loo=['RSD_oo','RSD_oo_diff']
neq=5
if Internal.getValue(Internal.getNodeFromType(t, 'GoverningEquations_t'))=='NSTurbulent':
neq = 6
for b in Internal.getBases(t):
nzones= len(Internal.getZones(b))
c = Internal.getNodeByName(b,'GlobalConvergenceHistory')
zones = Internal.getZones(b)
zone_cong_history = Internal.getNodeByName(zones[0],'ZoneConvergenceHistory')
RSD_ = Internal.getNodeByName(zone_cong_history,'IterationNumber')[1]
nrec = Internal.getValue(zone_cong_history)
##NOTE: the value of the ZoneConvergenceHistory node has the number of rec taking at time t
## the shape of the array of IterationNumber is total number of nrec.
Internal.setValue(c, nrec);
##IterationNumber Node
Internal.createChild(c, 'IterationNumber', 'DataArray_t', numpy.zeros((nrec), Internal.E_NpyInt))
RSD_b = Internal.getNodeByName(c, 'IterationNumber')[1]
RSD_b[:] = RSD_[:]
##The rest of the nodes in the convergence history
for var in var_list_L2:
tmp = numpy.zeros((nrec*neq), numpy.float64)
Internal.createChild(c, var , 'DataArray_t', tmp)
for var in var_list_Loo:
tmp = numpy.full((nrec*neq), -numpy.inf, dtype=numpy.float64)
Internal.createChild(c, var , 'DataArray_t', tmp)
total_Ncells = 0
for z in Internal.getZones(b):
#if z[0]=='GlobalConvergentHistory': continue
zone_cong_history =Internal.getNodeByName(z,'ZoneConvergenceHistory')
isCalcCheck =Internal.getNodeByName(z,'isCalc')
if isCalcCheck is None:isCalc=1
else: isCalc=Internal.getValue(isCalcCheck)
nx = Internal.getValue(z)[0][0]
ny = Internal.getValue(z)[1][0]
nz = Internal.getValue(z)[2][0]
zone_Ncells = nx*ny*nz*isCalc
total_Ncells += zone_Ncells
if isCalc==1:
##Loo per base
for var_local in var_list_Loo:
RSD_ = Internal.getNodeByName(zone_cong_history,var_local)[1]
RSD_b = Internal.getNodeByName(c,var_local)[1]
RSD_b[:] = numpy.maximum(RSD_b, RSD_)
##L2 per base (here only sum)
for var_local in var_list_L2:
RSD_ = Internal.getNodeByName(zone_cong_history,var_local)[1]
RSD_b = Internal.getNodeByName(c,var_local)[1]
RSD_b[:] += RSD_[:]*zone_Ncells
##Average L2 per base
for var_local in var_list_L2:
RSD_b = Internal.getNodeByName(c,var_local)[1]
RSD_b[:] /= total_Ncells
return t and call it at the end of your script _calc_global_convergence(t) which will soon be replaced by FastS._calc_global_convergence(t) NB: Stéphanie was right, leave Thanks |
Hello Luis, What I might also suggest: tconv=FastS.create_add_t_converg_hist(t) # creates a PyTree of the convergence histories only. such that one can (1) just load the residuals in tecplot (making their visualization easier) and (2) one can place these functions in the iteration loop to see the residuals on the fly (if it is needed). This is the approach I use. |
Hi Luis, |
Hi Vincent, The new version works great for zonal residuals extraction. However, I still do not get The case reproducing the issue, adapted from #13 : # - convergenceHistory (pyTree) -
import numpy
import Converter.PyTree as C
import Generator.PyTree as G
import FastS.PyTree as FastS
import FastC.PyTree as FastC
import Connector.PyTree as X
import Converter.Internal as I
import Initiator.PyTree as Init
npts = 9
dx = 0.5
z = G.cart((0.0,0.0,0.0), (dx,dx,dx), (npts,npts,npts))
C._addBC2Zone(z, 'WALL', 'FamilySpecified:WALL', 'imin')
C._fillEmptyBCWith(z, 'FARFIELD', 'FamilySpecified:FARFIELD', dim=3)
C._addState(z, 'GoverningEquations', 'NSTurbulent')
Init._initConst(z, MInf=0.4, loc='centers')
C._addState(z, MInf=0.4)
t = C.newPyTree(['Base', z])
C._tagWithFamily(t,'FARFIELD')
C._tagWithFamily(t,'WALL')
C._addFamily2Base(t, 'FARFIELD', bndType='BCFarfield')
C._addFamily2Base(t, 'WALL', bndType='BCWall')
import Dist2Walls.PyTree as DTW
walls = C.extractBCOfType(t, 'BCWall')
DTW._distance2Walls(t, walls, loc='centers', type='ortho')
numb = { 'temporal_scheme': 'implicit', 'ss_iteration':3, 'modulo_verif':1}
numz = { 'scheme':'roe', 'slope':'minmod',
'time_step':0.0007,'time_step_nature':'local', 'cfl':4}
FastC._setNum2Zones(t, numz); FastC._setNum2Base(t, numb)
(t, tc, metrics) = FastS.warmup(t, None)
nit = 10; time = 0
#To remove old ConvergenceHistory nodes
t = C.rmNodes(t, "ZoneConvergenceHistory")
FastS._createConvergenceHistory(t, nit)
time_step = I.getNodeFromName(t, 'time_step')
time_step = I.getValue(time_step)
for it in range(nit):
FastS._compute(t, metrics, it, tc)
FastS.display_temporal_criteria(t, metrics, it, format='store')
t = FastS.calc_global_convergence(t)
time += time_step
# time stamp
I.createUniqueChild(t, 'Iteration', 'DataArray_t', value=nit)
I.createUniqueChild(t, 'Time', 'DataArray_t', value=time)
C.convertPyTree2File(t, 'out.cgns')
RSD_L2 = I.getNodeFromName(t,'RSD_L2')[1]
print(f"{RSD_L2=}")
ItNumber = I.getNodeFromName(t,'IterationNumber')[1]
print(f"{ItNumber=}") Which provokes the error:
Thank you for your support Best regards |
Hi all,
This message is to inform that
GlobalConvergenceHistory
does not seem to be updated.If I run the example script convergenceHistory:
I can see that
GlobalConvergenceHistory
node is empty:best regards !
Luis
The text was updated successfully, but these errors were encountered: