function set_level_info, grid_info print, 'start set_lelvel_info' IF (N_ELEMENTS(grid_info) lt 1) THEN BEGIN print, 'set_level_info: no grid information in grid_info:',$ grid_info RETURN, grid_info ENDIF if (max(grid_info[*].level) le 0) then begin index_range = grid_info.End_index-grid_info.Start_index+1 delta_distance = DOUBLE(grid_info.Right_edge - $ grid_info.Left_edge)/DOUBLE(index_range) order = (1.D/delta_distance(0,*)) ; refined_by = 1 ;assumes domain goes from 0 - 1 !! may not be true in general. Also ; assume same refinement factor everywhere sorder = order[sort(order)] unique_levels = sorder[UNIQ(sorder)] if (N_ELEMENTS(unique_levels) gt 1) then refined_by = ROUND(unique_levels[1]/unique_levels[0]) print, 'Refinement factor =', refined_by levels = ROUND((ALOG(DOUBLE(order))/ALOG(DOUBLE(refined_by)))) ; normalize: levels = levels - Min(levels) grid_info[*].level = levels[*] endif print, 'end set_lelvel_info' return, grid_info end