def call(self, verbose=False, ret_all=None): """ Call the homogenization engine and compute the homogenized coefficients. Parameters ---------- verbose : bool If True, print the computed coefficients. ret_all : bool or None If not None, it can be used to override the 'return_all' option. If True, also the dependencies are returned. Returns ------- coefs : Coefficients instance The homogenized coefficients. dependencies : dict The dependencies, if `ret_all` is True. """ opts = self.app_options ret_all = get_default(ret_all, opts.return_all) volume = get_volume_from_options(opts, self.problem) for vk, vv in volume.iteritems(): output('volume: %s = %.2f' % (vk, vv)) he = HomogenizationEngine( self.problem, self.options, volume = volume ) aux = he( ret_all = ret_all) if ret_all: coefs, dependencies = aux else: coefs = aux coefs = Coefficients( **coefs.to_dict() ) coefs.volume = volume if verbose: prec = nm.get_printoptions()[ 'precision'] if hasattr(opts, 'print_digits'): nm.set_printoptions(precision=opts.print_digits) print coefs nm.set_printoptions(precision=prec) coef_save_name = op.join( opts.output_dir, opts.coefs_filename ) coefs.to_file_hdf5( coef_save_name + '.h5' ) coefs.to_file_txt( coef_save_name + '.txt', opts.tex_names, opts.float_format ) if ret_all: return coefs, dependencies else: return coefs
def call(self, ret_all=False, verbose=False): opts = self.app_options volume = {} if opts.volumes is not None: for vk, vv in opts.volumes.iteritems(): if 'value' in vv: volume[vk] = nm.float64(vv['value']) else: volume[vk] = Volume('volume', self.problem, vv)() else: if opts.volume is not None: if 'value' in opts.volume: vol = nm.float64(opts.volume['value']) else: vol = Volume('volume', self.problem, opts.volume)() volume['total'] = vol for vk, vv in volume.iteritems(): output('volume: %s = %.2f' % (vk, vv)) if hasattr(opts, 'return_all'): ret_all = opts.return_all he = HomogenizationEngine( self.problem, self.options, volume = volume ) aux = he( ret_all = ret_all) if ret_all: coefs, dependencies = aux else: coefs = aux coefs = Coefficients( **coefs.to_dict() ) coefs.volume = volume if verbose: prec = nm.get_printoptions()[ 'precision'] if hasattr(opts, 'print_digits'): nm.set_printoptions(precision=opts.print_digits) print coefs nm.set_printoptions(precision=prec) coef_save_name = op.join( opts.output_dir, opts.coefs_filename ) coefs.to_file_hdf5( coef_save_name + '.h5' ) coefs.to_file_txt( coef_save_name + '.txt', opts.tex_names, opts.float_format ) if ret_all: return coefs, dependencies else: return coefs
def call( self, ret_all = False ): opts = self.app_options if 'value' in opts.volume: volume = nm.float64( opts.options.volume['value'] ) else: volume = Volume( 'volume', self.problem, opts.volume )() output( 'volume: %.2f' % volume ) if hasattr(opts.options, 'return_all'): ret_all = opts.options.return_all he = HomogenizationEngine( self.problem, self.options, volume = volume ) aux = he( ret_all = ret_all) if ret_all: coefs, dependencies = aux else: coefs = aux coefs = Coefficients( **coefs.to_dict() ) coefs.volume = volume prec = nm.get_printoptions()[ 'precision'] if hasattr( opts, 'print_digits' ): nm.set_printoptions( precision = opts.print_digits ) print coefs nm.set_printoptions( precision = prec ) ## pause() coef_save_name = op.join( opts.output_dir, opts.coef_save_name ) coefs.to_file_hdf5( coef_save_name + '.h5' ) coefs.to_file_txt( coef_save_name + '.txt', opts.tex_names, opts.float_format ) if ret_all: return coefs, dependencies else: return coefs
def call(self, ret_all=False, verbose=False): opts = self.app_options volume = get_volume_from_options(opts, self.problem) for vk, vv in volume.iteritems(): output('volume: %s = %.2f' % (vk, vv)) he = HomogenizationEngine( self.problem, self.options, volume = volume ) aux = he( ret_all = ret_all) if ret_all: coefs, dependencies = aux else: coefs = aux coefs = Coefficients( **coefs.to_dict() ) coefs.volume = volume if verbose: prec = nm.get_printoptions()[ 'precision'] if hasattr(opts, 'print_digits'): nm.set_printoptions(precision=opts.print_digits) print coefs nm.set_printoptions(precision=prec) coef_save_name = op.join( opts.output_dir, opts.coefs_filename ) coefs.to_file_hdf5( coef_save_name + '.h5' ) coefs.to_file_txt( coef_save_name + '.txt', opts.tex_names, opts.float_format ) if ret_all: return coefs, dependencies else: return coefs
def call(self): """ Construct and call the homogenization engine accoring to options. """ options = self.options opts = self.app_options conf = self.problem.conf coefs_name = opts.coefs coef_info = conf.get(opts.coefs, None, 'missing "%s" in problem description!' % opts.coefs) if options.detect_band_gaps: # Compute band gaps coefficients and data. keys = [key for key in coef_info if key.startswith('band_gaps')] elif options.analyze_dispersion or options.phase_velocity: # Insert incident wave direction to coefficients that need it. for key, val in coef_info.iteritems(): coef_opts = val.get('options', None) if coef_opts is None: continue if (('incident_wave_dir' in coef_opts) and (coef_opts['incident_wave_dir'] is None)): coef_opts['incident_wave_dir'] = opts.incident_wave_dir if options.analyze_dispersion: # Compute dispersion coefficients and data. keys = [key for key in coef_info if key.startswith('dispersion') or key.startswith('polarization_angles')] else: # Compute phase velocity and its requirements. keys = [key for key in coef_info if key.startswith('phase_velocity')] else: # Compute only the eigenvalue problems. names = [req for req in conf.get(opts.requirements, ['']) if req.startswith('evp')] coefs = {'dummy' : {'requires' : names, 'class' : CoefDummy,}} conf.coefs_dummy = coefs coefs_name = 'coefs_dummy' keys = ['dummy'] he_options = Struct(coefs=coefs_name, requirements=opts.requirements, compute_only=keys, post_process_hook=self.post_process_hook) volume = get_volume_from_options(opts, self.problem) he = HomogenizationEngine(self.problem, options, app_options=he_options, volume=volume) coefs = he() coefs = Coefficients(**coefs.to_dict()) coefs.volume = volume coefs_filename = op.join(opts.output_dir, opts.coefs_filename) coefs.to_file_txt(coefs_filename + '.txt', opts.tex_names, opts.float_format) bg_keys = [key for key in coefs.to_dict() if key.startswith('band_gaps') or key.startswith('dispersion')] for ii, key in enumerate(bg_keys): bg = coefs.get(key) log_save_name = bg.get('log_save_name', None) if log_save_name is not None: filename = op.join(self.problem.output_dir, log_save_name) bg.save_log(filename, opts.float_format, bg) if options.plot: if options.detect_band_gaps: self.plot_band_gaps(coefs) elif options.analyze_dispersion: self.plot_dispersion(coefs) elif options.phase_velocity: keys = [key for key in coefs.to_dict() if key.startswith('phase_velocity')] for key in keys: output('%s:' % key, coefs.get(key)) return coefs