def main(): import os from sfepy.base.base import spause, output from sfepy.base.conf import ProblemConf, get_standard_keywords from sfepy.discrete import Problem import sfepy.homogenization.coefs_base as cb parser = ArgumentParser(description=__doc__) parser.add_argument('--version', action='version', version='%(prog)s') parser.add_argument('-n', '--no-pauses', action="store_true", dest='no_pauses', default=False, help=helps['no_pauses']) options = parser.parse_args() if options.no_pauses: def spause(*args): output(*args) nm.set_printoptions(precision=3) spause(r""">>> First, this file will be read in place of an input (problem description) file. Press 'q' to quit the example, press any other key to continue...""") required, other = get_standard_keywords() required.remove('equations') # Use this file as the input file. conf = ProblemConf.from_file(__file__, required, other) print(list(conf.to_dict().keys())) spause(r""">>> ...the read input as a dict (keys only for brevity). ['q'/other key to quit/continue...]""") spause(r""">>> Now the input will be used to create a Problem instance. ['q'/other key to quit/continue...]""") problem = Problem.from_conf(conf, init_equations=False) # The homogenization mini-apps need the output_dir. output_dir = '' problem.output_dir = output_dir print(problem) spause(r""">>> ...the Problem instance. ['q'/other key to quit/continue...]""") spause(r""">>> The homogenized elastic coefficient $E_{ijkl}$ is expressed using $\Pi$ operators, computed now. In fact, those operators are permuted coordinates of the mesh nodes. ['q'/other key to quit/continue...]""") req = conf.requirements['pis'] mini_app = cb.ShapeDimDim('pis', problem, req) pis = mini_app() print(pis) spause(r""">>> ...the $\Pi$ operators. ['q'/other key to quit/continue...]""") spause(r""">>> Next, $E_{ijkl}$ needs so called steady state correctors $\bar{\omega}^{rs}$, computed now. ['q'/other key to quit/continue...]""") req = conf.requirements['corrs_rs'] save_name = req.get('save_name', '') name = os.path.join(output_dir, save_name) mini_app = cb.CorrDimDim('steady rs correctors', problem, req) mini_app.setup_output(save_format='vtk', file_per_var=False) corrs_rs = mini_app(data={'pis': pis}) print(corrs_rs) spause(r""">>> ...the $\bar{\omega}^{rs}$ correctors. The results are saved in: %s.%s Try to display them with: python postproc.py %s.%s ['q'/other key to quit/continue...]""" % (2 * (name, problem.output_format))) spause(r""">>> Then the volume of the domain is needed. ['q'/other key to quit/continue...]""") volume = problem.evaluate('d_volume.i3.Y(uc)') print(volume) spause(r""">>> ...the volume. ['q'/other key to quit/continue...]""") spause(r""">>> Finally, $E_{ijkl}$ can be computed. ['q'/other key to quit/continue...]""") mini_app = cb.CoefSymSym('homogenized elastic tensor', problem, conf.coefs['E']) c_e = mini_app(volume, data={'pis': pis, 'corrs_rs' : corrs_rs}) print(r""">>> The homogenized elastic coefficient $E_{ijkl}$, symmetric storage with rows, columns in 11, 22, 12 ordering:""") print(c_e)
def main(): import os from sfepy.base.base import spause, output from sfepy.base.conf import ProblemConf, get_standard_keywords from sfepy.fem import ProblemDefinition import sfepy.homogenization.coefs_base as cb parser = OptionParser(usage=usage, version='%prog') parser.add_option('-n', '--no-pauses', action="store_true", dest='no_pauses', default=False, help=help['no_pauses']) options, args = parser.parse_args() if options.no_pauses: def spause(*args): output(*args) nm.set_printoptions( precision = 3 ) spause( r""">>> First, this file will be read in place of an input (problem description) file. Press 'q' to quit the example, press any other key to continue...""" ) required, other = get_standard_keywords() required.remove( 'equations' ) # Use this file as the input file. conf = ProblemConf.from_file( __file__, required, other ) print conf.to_dict().keys() spause( r""">>> ...the read input as a dict (keys only for brevity). ['q'/other key to quit/continue...]""" ) spause( r""">>> Now the input will be used to create a ProblemDefinition instance. ['q'/other key to quit/continue...]""" ) problem = ProblemDefinition.from_conf(conf, init_equations=False) # The homogenization mini-apps need the output_dir. output_dir = os.path.join(os.path.split(__file__)[0], 'output') if not os.path.exists(output_dir): os.makedirs(output_dir) problem.output_dir = output_dir print problem spause( r""">>> ...the ProblemDefinition instance. ['q'/other key to quit/continue...]""" ) spause( r""">>> The homogenized elastic coefficient $E_{ijkl}$ is expressed using $\Pi$ operators, computed now. In fact, those operators are permuted coordinates of the mesh nodes. ['q'/other key to quit/continue...]""" ) req = conf.requirements['pis'] mini_app = cb.ShapeDimDim( 'pis', problem, req ) pis = mini_app() print pis spause( r""">>> ...the $\Pi$ operators. ['q'/other key to quit/continue...]""" ) spause( r""">>> Next, $E_{ijkl}$ needs so called steady state correctors $\bar{\omega}^{rs}$, computed now. ['q'/other key to quit/continue...]""" ) req = conf.requirements['corrs_rs'] save_name = req.get( 'save_name', '' ) name = os.path.join( output_dir, save_name ) mini_app = cb.CorrDimDim('steady rs correctors', problem, req) mini_app.setup_output(save_format='vtk', file_per_var=False) corrs_rs = mini_app( data = {'pis': pis} ) print corrs_rs spause( r""">>> ...the $\bar{\omega}^{rs}$ correctors. The results are saved in: %s.%s Try to display them with: python postproc.py %s.%s ['q'/other key to quit/continue...]""" % (2 * (name, problem.output_format)) ) spause( r""">>> Then the volume of the domain is needed. ['q'/other key to quit/continue...]""" ) volume = problem.evaluate('d_volume.i3.Y( uc )') print volume spause( r""">>> ...the volume. ['q'/other key to quit/continue...]""" ) spause( r""">>> Finally, $E_{ijkl}$ can be computed. ['q'/other key to quit/continue...]""" ) mini_app = cb.CoefSymSym('homogenized elastic tensor', problem, conf.coefs['E']) c_e = mini_app(volume, data={'pis': pis, 'corrs_rs' : corrs_rs}) print r""">>> The homogenized elastic coefficient $E_{ijkl}$, symmetric storage with rows, columns in 11, 22, 12 ordering:""" print c_e
def main(): from sfepy.base.base import spause from sfepy.base.conf import ProblemConf, get_standard_keywords from sfepy.fem import eval_term_op, ProblemDefinition from sfepy.homogenization.utils import create_pis from sfepy.homogenization.coefs import CorrectorsRS, ElasticCoef nm.set_printoptions( precision = 3 ) spause( r""">>> First, this file will be read in place of an input (problem description) file. Press 'q' to quit the example, press any other key to continue...""" ) required, other = get_standard_keywords() required.remove( 'equations' ) # Use this file as the input file. conf = ProblemConf.from_file( __file__, required, other ) print conf.to_dict().keys() spause( r""">>> ...the read input as a dict (keys only for brevity). ['q'/other key to quit/continue...]""" ) spause( r""">>> Now the input will be used to create a ProblemDefinition instance. ['q'/other key to quit/continue...]""" ) problem = ProblemDefinition.from_conf( conf, init_variables = False, init_equations = False ) print problem spause( r""">>> ...the ProblemDefinition instance. ['q'/other key to quit/continue...]""" ) spause( r""">>> The homogenized elastic coefficient $E_{ijkl}$ is expressed using $\Pi$ operators, computed now. In fact, those operators are permuted coordinates of the mesh nodes. ['q'/other key to quit/continue...]""" ) req = conf.requirements['pis'] pis = create_pis( problem, req['variables'][0] ) print pis spause( r""">>> ...the $\Pi$ operators. ['q'/other key to quit/continue...]""" ) spause( r""">>> Next, $E_{ijkl}$ needs so called steady state correctors $\bar{\omega}^{rs}$, computed now. The results will be saved in: %s_*.vtk ['q'/other key to quit/continue...]""" % problem.ofn_trunk ) save_hook = make_save_hook( problem.ofn_trunk + '_rs_%d%d' ) req = conf.requirements['corrs_rs'] solve_corrs = CorrectorsRS( 'steady rs correctors', problem, req ) corrs_rs = solve_corrs( data = pis, save_hook = save_hook ) print corrs_rs spause( r""">>> ...the $\bar{\omega}^{rs}$ correctors. ['q'/other key to quit/continue...]""" ) spause( r""">>> Then the volume of the domain is needed. ['q'/other key to quit/continue...]""" ) volume = eval_term_op( None, 'd_volume.i3.Y( uc )', problem ) print volume spause( r""">>> ...the volume. ['q'/other key to quit/continue...]""" ) spause( r""">>> Finally, $E_{ijkl}$ can be computed. ['q'/other key to quit/continue...]""" ) get_coef = ElasticCoef( 'homogenized elastic tensor', problem, conf.coefs['E'] ) c_e = get_coef( volume, data = {'pis': pis, 'corrs' : corrs_rs} ) print r""">>> The homogenized elastic coefficient $E_{ijkl}$, symmetric storage with rows, columns in 11, 22, 12 ordering:""" print c_e