Example #1
0
def _main():

    parser = argparse.ArgumentParser(description='--- cascade annealing ---')

    parser.add_argument('INPUT', help='the input json database')

    args = parser.parse_args()

    fp = open(args.INPUT, 'r')
    jdata = json.load(fp)

    seed = None
    if j_have(jdata, 'seed'):
        seed = jdata['seed']
        seed = seed % (2**32)
    np.random.seed(seed)

    individual_cascade = False
    if j_have(jdata, 'individual_cascade'):
        individual_cascade = jdata['individual_cascade']

    multi_cascade = False
    if j_have(jdata, 'multi_cascade'): multi_cascade = jdata['multi_cascade']

    if individual_cascade == False and multi_cascade == False:
        raise RuntimeError(
            'individual_cascade and multi_cascade are all set False, wrong ! Please set true for one of them !'
        )

    cascade = Cascade(jdata)

    if individual_cascade: individual_cascade_annealing(jdata, cascade)
    if multi_cascade: multi_cascade_annealing(jdata, cascade)
Example #2
0
def individual_cascade_annealing(jdata, cascade):

    trap = False
    trapSys = None

    if j_have(jdata, 'trap'): trap = jdata['trap']
    if trap: trapSys = TrapSystem(jdata)

    for i in range(cascade.return_cascade_numb()):

        start_time = time.time()

        'build a defectSys of Class DefectSystem for okmc simulation.'
        defectSys = DefectSystem(jdata,
                                 cascade.return_defectStr_list(jdata, i))

        outputFile = OutputFile(defectSys, jdata, i)

        'reset trap for all defectObject in model of Class DefectSystem.'
        if trap: defectSys.reset_trap_defectSystem(jdata, trapSys)

        defectSys.evolution(jdata, outputFile, trapSys)

        end_time = time.time()

        print('# cascade %d running time: %.3f s' % (i, end_time - start_time))
        print('#    ')

    print('# All cascades annealing done !')

    return None
Example #3
0
def multi_cascade_annealing(jdata, cascade):

    tmp_ConstNumber = ConstNumber(jdata)
    box = j_must_have(jdata, 'box')

    trap = False
    trapSys = None

    if j_have(jdata, 'trap'): trap = jdata['trap']
    if trap: trapSys = TrapSystem(jdata)

    total_cascade_numb = int(jdata['fluence'] * box[0] * box[1])
    position_random = jdata['position_random']

    cascade_numb = cascade.return_cascade_numb()
    i_select = np.random.randint(0, cascade_numb)

    'build a defectSys of Class DefectSystem for okmc simulation.'
    defectSys = DefectSystem(jdata,
                             cascade.return_defectStr_list(jdata, i_select))

    outputFile = OutputFile(defectSys, jdata)

    print('# %d cascades in database, total %d cascades annealing' %
          (cascade_numb, total_cascade_numb))

    for i in range(total_cascade_numb):

        start_time = time.time()

        'reset trap for all defectObject in model of Class DefectSystem.'
        if trap: defectSys.reset_trap_defectSystem(jdata, trapSys)

        defectSys.evolution(jdata, outputFile, trapSys)

        i_select = np.random.randint(0, cascade_numb)

        add_defectStr_list = cascade.return_defectStr_list(jdata, i_select)

        defectSys.add_defectObject(jdata, add_defectStr_list, position_random)
        defectSys.set_initial_recombine_and_related_properties(
            jdata, tmp_ConstNumber)

        defectSys.set_zero_c_time()

        end_time = time.time()

        print('# cascade %d running time: %.3f s' % (i, end_time - start_time))
        print('#    ')

    print('# All cascades annealing done !')

    return None
Example #4
0
    def __init__(self, defectsys, jdata, index=None):
        'property'

        self.out_dir = os.path.join(j_must_have(jdata, 'out_dir'), 'output')

        if index == None or index == 0:
            if os.path.exists(self.out_dir): shutil.rmtree(self.out_dir)
            os.mkdir(self.out_dir)

        if index != None:
            self.out_dir = os.path.join(self.out_dir, str(index))
            if os.path.exists(self.out_dir): shutil.rmtree(self.out_dir)
            os.mkdir(self.out_dir)

        self.step = defectsys.c_step
        self.time = defectsys.c_time

        self.out_style_freq = j_must_have(jdata, 'out_style_freq')

        self.out_cfg = False

        if j_have(jdata, 'out_cfg_dir_name'):
            '0. self.out_cfg, 1. self.cfg_path, 2. self.cfg_name, 3. self.target_cfg'

            self.out_cfg = True
            out_cfg_dir_name = jdata['out_cfg_dir_name']
            self.cfg_path = os.path.join(self.out_dir, out_cfg_dir_name[0])
            os.mkdir(self.cfg_path)

            self.cfg_name = out_cfg_dir_name[1]
            self.target_cfg = os.path.join(
                self.cfg_path, self.cfg_name + '.' + str(self.step) + '.cfg')

        self.out_defectStr = False

        if j_have(jdata, 'out_defectStr_dir_name'):
            '0. self.out_defectStr, 1. self.defectStr_path, 2. self.defectStr_name, 3. self.target_defectStr'

            self.out_defectStr = True

            out_defectStr_dir_name = jdata['out_defectStr_dir_name']

            self.defectStr_path = os.path.join(self.out_dir,
                                               out_defectStr_dir_name[0])
            os.mkdir(self.defectStr_path)

            self.defectStr_name = out_defectStr_dir_name[1]
            self.target_defectStr = os.path.join(
                self.defectStr_path,
                self.defectStr_name + '.' + str(self.step))

        self.out_volume_density = False

        if j_have(jdata, 'out_volume_density_dir_name'):
            '0. self.out_volume_density, 1. self.volume_density_path, 2. self.volume_density_name, 3. self.target_volume_density'

            self.out_volume_density = True

            out_volume_density_dir_name = jdata['out_volume_density_dir_name']

            self.volume_density_path = os.path.join(
                self.out_dir, out_volume_density_dir_name[0])
            os.mkdir(self.volume_density_path)

            self.volume_density_name = out_volume_density_dir_name[1]
            self.target_volume_density = os.path.join(
                self.volume_density_path,
                self.volume_density_name + '.' + str(self.step))

        self.out_area_density = False

        if j_have(jdata, 'out_area_density_dir_name'):
            '0. self.out_area_density, 1. self.area_density_path, 2. self.area_density_name, 3. self.target_area_density'

            self.out_area_density = True

            out_area_density_dir_name = jdata['out_area_density_dir_name']

            self.area_density_path = os.path.join(self.out_dir,
                                                  out_area_density_dir_name[0])
            os.mkdir(self.area_density_path)

            self.area_density_name = out_area_density_dir_name[1]
            self.target_area_density = os.path.join(
                self.area_density_path,
                self.area_density_name + '.' + str(self.step))

        self.out_points = False

        if j_have(jdata, 'out_point_defects_dir_name'):
            '0. self.out_points, 1. self.points_path, 2. self.points_name, 3. self.target_points'

            self.out_points = True

            out_points_dir_name = jdata['out_point_defects_dir_name']

            self.points_path = os.path.join(self.out_dir,
                                            out_points_dir_name[0])
            os.mkdir(self.points_path)

            self.points_name = out_points_dir_name[1]
            self.target_points = os.path.join(
                self.points_path, self.points_name + '.' + str(self.step))

        self.out_size_distri = False

        if j_have(jdata, 'out_size_distri_dir_name'):

            '0. self.out_size_distri, 1. self.size_distri_path, 2. self.size_distri_name, 3. self.target_size_distri.'

            self.out_size_distri = True

            out_size_distri_dir_name = jdata['out_size_distri_dir_name']
            self.size_distri_path = os.path.join(self.out_dir,
                                                 out_size_distri_dir_name)
            os.mkdir(self.size_distri_path)

            self.out_size_distri_defecttype = jdata[
                'out_size_distri_defecttype']

            for item in self.out_size_distri_defecttype:
                os.mkdir(os.path.join(self.size_distri_path, item))

        '1. self.target_steptime.'

        out_steptime_dir_name = j_must_have(jdata, 'out_steptime_dir_name')

        steptime_path = os.path.join(self.out_dir, out_steptime_dir_name[0])
        os.mkdir(steptime_path)

        self.target_steptime = os.path.join(steptime_path,
                                            out_steptime_dir_name[1])
        self.file_out_steptime = open(self.target_steptime, 'w')
        self.file_out_steptime.writelines([
            '# step, c_time(s), total_defects_I, total_defects_V, numb_defectObject'
            + '\n'
        ])
        self.file_out_steptime.close()

        self.set_min_max_nsize_dict(defectsys, jdata)
        self.set_sum_numb_nsize_dict(defectsys, jdata)
Example #5
0
    def load_cascade_from_file(self, jdata, serial_numb):
        '''
        1. self.cluster == True, cascade file format:
         100.0 100.0 100.0 # b011, b022, b033, units: nm
         I 1 10.0 10.0 10.0
         V 1 10.0 10.0 10.0
         ...        

         reading defects and convert clusters

        2. self.cluster == False, cascade file format:
         100.0 100.0 100.0 # b011, b022, b033, units: nm
         (1): ILoop100 13 10.0 10.0 10.0
         (2): ILoop111 13 10.0 10.0 10.0 0.5 0.5 0.5
         ...

         reading defects directly
        '''

        if serial_numb > self.cascade_numb:
            raise RuntimeError('serial_numb %d not in range [ 0, %d ]' %
                               (serial_numb, self.cascade_numb))

        file_in = open(self.cascade_file[serial_numb], 'r')

        alatt = j_must_have(jdata, 'alatt')

        burgers_vector_unit_array = np.array(
            j_must_have(jdata, 'burgers_vector_unit'))

        burgers_vector_scale_length_array = np.array(
            j_must_have(jdata, 'burgers_vector_scale_length'))

        'set d_probability = 1.0 / burgers_vector_scale_length_array.size + 0.037142857 formatly.'
        d_probability = 0.037142857 + 1.0 / burgers_vector_scale_length_array.size
        if j_have(jdata, 'probability'): d_probability = jdata['probability']

        if self.cluster:

            # test_cgzhang
            print('defect cluster algorithm is done!')

            I_position_list = []
            V_position_list = []

            s = file_in.readline()
            defectStr = s.lstrip().rstrip()
            defectStr_list = defectStr.split()
            tmp_box = np.array(
                [np.float64(item) for item in defectStr_list[0:3]])

            while True:
                s = file_in.readline()
                if s == '':
                    break

                defectStr = s.lstrip().rstrip()
                defectStr_list = defectStr.split()

                position = [np.float64(item) for item in defectStr_list[2:5]]

                if defectStr_list[0] == 'I':
                    I_position_list.append(position)
                else:
                    V_position_list.append(position)

            I_position_array = np.array(I_position_list)
            V_position_array = np.array(V_position_list)

            clusterSys = ClusterSystem(alatt, self.ICluster_upper,
                                       self.VLoop_lower, 'I',
                                       self.IC_VC_rcut[0], I_position_array,
                                       tmp_box, burgers_vector_unit_array,
                                       burgers_vector_scale_length_array,
                                       d_probability)
            clusterSys.add_clusters(alatt, self.ICluster_upper,
                                    self.VLoop_lower, 'V', self.IC_VC_rcut[1],
                                    V_position_array, tmp_box)

            self.defectStr_list = clusterSys.return_defectStr_list()

        else:

            self.defectStr_list = []

            s = file_in.readline()
            while True:
                s = file_in.readline()
                if s == '':
                    break
                self.defectStr_list.append(s)
Example #6
0
    def __init__(self, jdata):
        '''
        Class Cascade properties:

         1. self.defectStr_list
            format:

            (1): ILoop100 13 10.0 10.0 10.0
            (2): ILoop111 13 10.0 10.0 10.0 0.5 0.5 0.5

        mode :  
         1. cascade from formula

         2. cascade from file
            a. self.cluster == True, defects of I and V convert into clusters
            b. self.cluster == False, defects of I and V does not convert into clusters

         3. cascade I and V randomly and uniformly distributed in simulation box, for electron irradiation
        '''

        self.cascade_from_formula = False

        if j_have(jdata, 'cascade_from_formula'):
            self.cascade_from_formula = jdata['cascade_from_formula']

        if self.cascade_from_formula:

            self.cascade_numb = j_must_have(jdata, 'cascade_numb')
            self.I_total = j_must_have(jdata, 'I_total')
            self.SI = j_must_have(jdata, 'SI')
            self.mu = j_must_have(jdata, 'mu')
            self.sigma = j_must_have(jdata, 'sigma')
            self.SV = j_must_have(jdata, 'SV')

            self.ICluster_upper = j_must_have(jdata, 'ICluster_upper')
            self.ratio_ILoop111_ILoop100 = j_must_have(
                jdata, 'ratio_ILoop111_ILoop100')

            self.VLoop_lower = j_must_have(jdata, 'VLoop_lower')
            self.ratio_VCluster_VLoop100_VLoop111 = j_must_have(
                jdata, 'ratio_VCluster_VLoop100_VLoop111')

        self.cascade_from_file = False

        if j_have(jdata, 'cascade_from_file'):
            self.cascade_from_file = jdata['cascade_from_file']

        if self.cascade_from_file:

            sys_path = j_must_have(jdata, 'systems')
            cascade_prefix = j_must_have(jdata, 'cascade_prefix')

            if j_have(jdata, 'sys_defects_cfg'):
                sys_defects_cfg = jdata['sys_defects_cfg']
                defects_cfg_prefix = j_must_have(jdata, 'defects_cfg_prefix')
                self.defects_cfg_file = glob.glob(
                    os.path.join(sys_defects_cfg, defects_cfg_prefix + '.*'))
                self.defects_cfg_file.sort(key=return_serial_numb_in_str)

                if os.path.exists(sys_path): shutil.rmtree(sys_path)
                os.mkdir(sys_path)

                self.cascade_cfg_2_points_defectStr(sys_path, cascade_prefix)

            self.cascade_file = glob.glob(
                os.path.join(sys_path, cascade_prefix + '.*'))
            self.cascade_file.sort(key=return_serial_numb_in_str)
            self.cascade_numb = len(self.cascade_file)

            self.cluster = j_must_have(jdata, 'cluster')

            if self.cluster:
                self.IC_VC_rcut = j_must_have(jdata, 'IC_VC_rcut')
                self.VLoop_lower = j_must_have(jdata, 'VLoop_lower')
                self.ICluster_upper = j_must_have(jdata, 'ICluster_upper')

        self.point_defects_uniform_distribution = False

        if j_have(jdata, 'point_defects_uniform_distribution'):
            self.point_defects_uniform_distribution = jdata[
                'point_defects_uniform_distribution']

        if self.point_defects_uniform_distribution:

            self.cascade_numb = j_must_have(jdata, 'cascade_numb')
            self.I_total = j_must_have(jdata, 'I_total')