Пример #1
0
 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'))       
Пример #2
0
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')
Пример #3
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')
        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
Пример #4
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