def __init__(self, cfg): self.cfg = cfg self.verbose = self.cfg.get('general.verbose') self.fiberlayout = self.cfg.get('domain.fiberlayout_method') self.distribute_fiber = self.cfg.get('domain.distribute_fiber') self.x_central = 0. self.y_central = 0. self.z = 0. if not (self.fiberlayout in FIBERLAYOUTS): print 'ERROR: unkown fiber layout method %s' % self.fiberlayout sys.exit(0) self.Ry = self.cfg.get('domain.yarnradius') self.scaleL = 1./self.Ry #get the scale factor for relative domain #computational radius self.radius_yarn = self.scaleL * self.Ry self.cellsize_centre = self.cfg.get('domain.cellsize_centre') self.cellSize = self.cfg.get('domain.cellsize_fiber') self.number_fiber = self.cfg.get('fiber.number_fiber') self.blend = self.cfg.get('fiber.blend') if self.verbose: print 'Blend used:', len(self.blend) self.number_fiber_blend = [int(round(val/100*self.number_fiber)) for val in self.blend] self.number_fiber_blend[-1] = self.number_fiber - np.sum(self.number_fiber_blend[:-1]) if self.verbose: print 'Fibers per blend', self.number_fiber_blend,' total', self.number_fiber self.theta_value = self.cfg.get('domain.theta_value') self.beta_value = self.cfg.get('domain.beta_value') #obtain size of fibers self.Rf = [] self.Rf_form = [] self.ecc = [] self.mean_deviation = [] for filename in self.cfg.get('fiber.fiber_config'): if not os.path.isabs(filename): filename = os.path.normpath(os.path.join( os.path.dirname(self.cfg.filename), filename)) cfg_fiber = FiberConfigManager.get_instance(filename) self.Rf.append(cfg_fiber.get('fiber.radius_pure_fiber')) for i in range(cfg_fiber.get('fiber.nrlayers')): section = 'fiberlayer_%i' % i self.Rf[-1] += cfg_fiber.get(section + '.thickness') #scaled mean deviation of the fiber self.mean_deviation.append(self.scaleL * cfg_fiber.get('fiber.mean_deviation')) self.Rf_form.append(FIBER_FORM[cfg_fiber.get('fiber.form')]) self.ecc.append(cfg_fiber.get('fiber.eccentricity')) self.radius_fiber = [self.scaleL * rad for rad in self.Rf] self.radius_boundlayer = max(self.radius_fiber)/2. self.radius_domain = self.radius_yarn + self.radius_boundlayer self.prob_area = eval (self.cfg.get('fiber.prob_area'))
radius_pure_fiber = 0.05441 form = 'ellipse' eccentricity = 0.7 nrlayers = 2 mean_deviation = 0.0 [fiberlayer_0] thickness = 0.001 [fiberlayer_1] thickness = 0.001 [plot] plotevery = 10 """ from stick.fiber.config import FiberConfigManager from stick.yarn.config import YarnConfigManager from stick.lib.utils.utils import set_outputdir cfgf1 = FiberConfigManager.get_instance('tmpfiber1.ini', realdatastr=ini_fiber1) cfgf2 = FiberConfigManager.get_instance('tmpfiber2.ini', realdatastr=ini_fiber2) cfg = YarnConfigManager.get_instance('tmpyarn.ini', realdatastr=ini_yarn) if not os.path.isdir('temp'): os.mkdir('temp') set_outputdir('temp') #create a 2D grid for simulate DEET diffusion process from stick.yarn2d.yarn2dmodel import Yarn2DModel Yarn2DModel(cfg) print 'calculate DEET diffusion' raw_input('Press key to quit the calculation')
def __init__(self, config): """ a config class must be passed in that contains the required settings """ self.cfg = config self.verbose = self.cfg.get('general.verbose') self.time_period = self.cfg.get('time.time_period') self.delta_t = self.cfg.get('time.dt') self.steps = int((self.time_period*(1.+self.delta_t*1e-6)) // self.delta_t) #set correct delta_t self.delta_t = self.time_period / self.steps if self.verbose: print "Timestep used in yarn1d model:", self.delta_t self.diff_coef = self.cfg.get('diffusion.diffusion_coeff') self.init_conc_func = eval(self.cfg.get('initial.init_conc1d')) self.number_fiber = self.cfg.get('fiber.number_fiber') self.blend = self.cfg.get('fiber.blend') self.blend = [x/100. for x in self.blend] self.nr_models = self.cfg.get('fiber.number_type') assert self.nr_models == len(self.blend) == len(self.cfg.get('fiber.fiber_config')) #Initialize the tortuosity self.tortuosity = self.cfg.get('yarn.tortuosity') #construct the config for the fibers self.cfg_fiber = [] for filename in self.cfg.get('fiber.fiber_config'): if not os.path.isabs(filename): filename = os.path.normpath(os.path.join( os.path.dirname(self.cfg.filename), filename)) self.cfg_fiber.append(FiberConfigManager.get_instance(filename)) #set values from the yarn on this inifile self.cfg_fiber[-1].set("time.time_period", self.time_period) if self.cfg_fiber[-1].get("time.dt") > self.cfg.get("time.dt"): self.cfg_fiber[-1].set("time.dt", self.cfg.get("time.dt")) #we need stepwize solution, we select cvode self.cfg_fiber[-1].set("general.method", 'FVM') self.cfg_fiber[-1].set("general.submethod", 'cvode_step') #we check that boundary is transfer or evaporation bty = self.cfg_fiber[-1].get("boundary.type_right") if bty not in ['evaporation', 'transfer']: raise ValueError, 'Boundary type for a fiber should be evaporation or transfer' if self.verbose: print 'NOTE: Fiber has boundary out of type %s' % bty #set data in case fiber with extension area is used self.cfg_fiber[-1].set("fiber.extenddiff", self.diff_coef/self.tortuosity) #some memory self.step_old_time = None self.step_old_sol = None #use the area function for calculating porosity self.prob_area = eval(self.cfg.get('fiber.prob_area')) # boundary data self.bound_type = conf.BOUND_TYPE[self.cfg.get('boundary.type_right')] self.boundary_conc_out = self.cfg.get('boundary.conc_out') self.boundary_D_out = self.cfg.get('boundary.D_out') self.boundary_dist = self.cfg.get('boundary.dist_conc_out') self.boundary_transf_right = self.cfg.get('boundary.transfer_coef') self.nr_fibers = self.cfg.get('fiber.number_fiber') self.plotevery = self.cfg.get("plot.plotevery") self.writeevery = self.cfg.get("plot.writeevery") #allow a multiscale model to work with a source in overlap zone self.source_overlap = 0. self.initialized = False self.fiberconc_center = 0 self.fiberconc_middle = 0 self.fiberconc_surface = 0
def __init__(self, config): """ a config class must be passed in that contains the required settings """ self.cfg = config self.verbose = self.cfg.get('general.verbose') #time data self.time_period = self.cfg.get('time.time_period') self.delta_t = self.cfg.get('time.dt') self.steps = int((self.time_period*(1.+self.delta_t*1e-6)) // self.delta_t) self.times = sp.linspace(0, self.time_period, self.steps + 1) self.delta_t = self.times[1] - self.times[0] if self.verbose: print "Timestep used in yarn1d model:", self.delta_t self.diffusion_DEET = self.cfg.get('diffusion.diffusion_coeff') self.init_conc = eval(self.cfg.get('initial.init_conc2d')) self.Ry = self.cfg.get('domain.yarnradius') self.scaleL = 1./self.Ry #get the scale factor for relative domain self.eps_value = self.cfg.get('fiber.eps_value') self.number_fiber = self.cfg.get('fiber.number_fiber') self.blend = self.cfg.get('fiber.blend') self.nrtypefiber = self.cfg.get('fiber.number_type') self.fiber_edge_result = [0] * self.nrtypefiber self.boundary_diff_out = self.cfg.get('boundary.conc_out') assert self.nrtypefiber == len(self.blend) == len(self.cfg.get('fiber.fiber_config')) #construct cfg for fiber self.cfg_fiber = [] for filename in self.cfg.get('fiber.fiber_config'): if not os.path.isabs(filename): filename = os.path.normpath(os.path.join( os.path.dirname(self.cfg.filename), filename)) self.cfg_fiber.append(FiberConfigManager.get_instance(filename)) #set values from the yarn on this inifile self.cfg_fiber[-1].set("time.time_period", self.time_period) if self.cfg_fiber[-1].get("time.dt") > self.cfg.get("time.dt"): self.cfg_fiber[-1].set("time.dt", self.cfg.get("time.dt")) #we need stepwize solution, we select cvode self.cfg_fiber[-1].set("general.method", 'FVM') self.cfg_fiber[-1].set("general.submethod", 'cvode_step') #we check that boundary is transfer or evaporation bty = self.cfg_fiber[-1].get("boundary.type_right") if bty not in ['evaporation', 'transfer']: raise ValueError, 'Boundary type for a fiber should be evaporation or transfer' if self.verbose: print 'NOTE: Fiber has boundary out of type %s' % bty #create fiber models self.fiber_models = [] for cfg in self.cfg_fiber: self.fiber_models.append(FiberModel(cfg)) #obtain some fiber data for quick reference self.Rf = [] for fmodel in self.fiber_models: self.Rf.append(fmodel.radius()) self.radius_fiber = [self.scaleL * rad for rad in self.Rf] # boundary data self.bound_type = conf.BOUND_TYPE[self.cfg.get('boundary.type_right')] self.boundary_conc_out = self.cfg.get('boundary.conc_out') self.boundary_D_out = self.cfg.get('boundary.D_out') self.boundary_dist = self.cfg.get('boundary.dist_conc_out') self.boundary_transf_right = self.cfg.get('boundary.transfer_coef') self.nr_fibers = self.cfg.get('fiber.number_fiber') self.plotevery = self.cfg.get("plot.plotevery") self.writeevery = self.cfg.get("plot.writeevery") self.writeoutcount = 0 #take the value for the parameters of the fiber scale self.nr_edge = self.cfg.get("domain.n_edge") #some memory self.step_old_time = None self.step_old_sol = None self.initialized = False