Пример #1
0
 def setUp(self):
     self.project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=self.tmpDir)
     self.sset = jpy.SimulationSet(self.project, MIE_KEYS, **self.DF_ARGS)
     self.sset.make_simulation_schedule()
     self.sset.use_only_resources('localhost')
     self.assertEqual(self.sset.num_sims, 6)
     self.assertTrue(self.sset.is_store_empty())
Пример #2
0
 def test_project_loading(self):
     specs = [DEFAULT_PROJECT,
              jpy.utils.split_path_to_parts(DEFAULT_PROJECT)]
     for s in specs:
         project = jpy.JCMProject(s, working_dir=self.tmpDir)
         project.copy_to(overwrite=True)
         project.remove_working_dir()
Пример #3
0
 def test_standard(self):
     self.project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=TMP_DIR)
     self.sset = jpy.SimulationSet(self.project,
                                   MIE_KEYS,
                                   duplicate_path_levels=0,
                                   storage_folder=SFOLDER,
                                   storage_base=TMP_SBASE)
     self.sset.make_simulation_schedule()
     self.sset.use_only_resources('localhost')
     self.sset.run(processing_func=DEFAULT_PROCESSING_FUNC)
Пример #4
0
    def test_simuSet_basic(self):
        project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=self.tmpDir)

        # Wrong project and keys specifications
        arg_tuples = [('non_existent_dir', {}),
                      (('a', 'b', 'c'), {}),
                      (project, {}),
                      (project, {'constants': None}),
                      (project, {'geometry': []})]
        for args in arg_tuples:
            self.assertRaises(ValueError,
                              jpy.SimulationSet, *args, **self.DF_ARGS)

        # This should work:
        simuset = jpy.SimulationSet(project, {'constants': {}}, **self.DF_ARGS)
        simuset.close_store()
Пример #5
0
    def test_simuSet_multi_schedule(self):
        self.tmpDir = os.path.abspath('tmp')
        project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=self.tmpDir)
        simuset = jpy.SimulationSet(project, MIE_KEYS, **self.DF_ARGS)
        simuset.make_simulation_schedule()
        self.assertEqual(simuset.num_sims, 6)

        # Test the correct sort order
        allGeoKeys = []
        for s in simuset.simulations:
            allGeoKeys.append({k: s.keys[k] for k in simuset.geometry})
        for i, s in enumerate(simuset.simulations):
            if s.rerun_JCMgeo:
                gtype = allGeoKeys[i]
            else:
                self.assertDictEqual(gtype, allGeoKeys[i])
        simuset.close_store()
Пример #6
0
    def test_transitional_both_not_empty(self):
        self.project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=TMP_DIR)

        # We fill the source directory with incomplete data
        ckwargs = dict(duplicate_path_levels=2, storage_folder=SFOLDER)
        self.sset = jpy.SimulationSet(self.project,
                                      MIE_KEYS_INCOMPLETE,
                                      storage_base=TMP_TBASE,
                                      **ckwargs)
        self.sset.make_simulation_schedule()
        self.sset.use_only_resources('localhost')
        self.sset.run(processing_func=DEFAULT_PROCESSING_FUNC)
        self.sset.close_store()
        del self.sset

        # We fill the target directory with incomplete data
        ckwargs = dict(duplicate_path_levels=2, storage_folder=SFOLDER)
        self.sset = jpy.SimulationSet(self.project,
                                      MIE_KEYS_INCOMPLETE,
                                      storage_base=TMP_SBASE,
                                      **ckwargs)
        self.sset.make_simulation_schedule()
        self.sset.use_only_resources('localhost')
        self.sset.run(processing_func=DEFAULT_PROCESSING_FUNC)
        self.sset.close_store()
        del self.sset

        # And now we set up a simuset with a non-empty transitional folder and
        # a non empty target folder
        self.sset = jpy.SimulationSet(self.project,
                                      MIE_KEYS,
                                      storage_base=TMP_SBASE,
                                      transitional_storage_base=TMP_TBASE,
                                      **ckwargs)
        self.sset.make_simulation_schedule()
        self.sset.use_only_resources('localhost')
        self.sset.run(processing_func=DEFAULT_PROCESSING_FUNC)
Пример #7
0
 def setUp(self):
     self.project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=self.tmpDir)
     self.ctest = jpy.ConvergenceTest(self.project, MIE_KEYS_TEST,
                                      MIE_KEYS_REF, **self.DF_ARGS)
Пример #8
0
        'fem_degree_max': np.arange(2, 5),
        'precision_field_energy': 1.e-2
    },
    'geometry': {
        'radius': 0.3,
        'slc_domain': np.array([0.2, 0.4]),
        'slc_circle': np.array([0.1, 0.2]),
        'refine_all_circle': 4
    }
}

# Check if the project base is properly configured, i.e. contains the mie2D
# project
PROJECT_BASE = _config.get('Data', 'projects')
try:
    jpy.JCMProject(DEFAULT_PROJECT)
except (OSError, ConfigurationError) as e:
    logger.warn('Could not load the example project mie2D from your' +
                ' configured project base. The error raised by JCMProject is' +
                '\n\t{}'.format(e))
    logger.info('Looking for a valid project base in the parent directory...')
    PROJECT_BASE = os.path.abspath('../projects')
    if os.path.isdir(PROJECT_BASE):
        DEFAULT_PROJECT = os.path.join(PROJECT_BASE, DEFAULT_PROJECT)
        try:
            jpy.JCMProject(DEFAULT_PROJECT)
        except (OSError, ConfigurationError) as e:
            logger.exception('Unable to find a valid project base in your' +
                             ' configuration and in the parent directory. ' +
                             'Please check your configuration file! Error ' +
                             'message:\n\t{}'.format(e))
Пример #9
0
 def test_simuSet_single_schedule(self):
     project = jpy.JCMProject(DEFAULT_PROJECT, working_dir=self.tmpDir)
     simuset = jpy.SimulationSet(project, MIE_KEYS_SINGLE, **self.DF_ARGS)
     simuset.make_simulation_schedule()
     self.assertEqual(simuset.num_sims, 1)
     simuset.close_store()
Пример #10
0
def StartScript(args):
    if not args.NDemonJobs == 'all':
        args.NDemonJobs = int(args.NDemonJobs)
    if args.ProcessCCosts == "True":
        args.ProcessCCosts = True
    elif args.ProcessCCosts == 'False':
        args.ProcessCCosts = False
    assert (args.ParameterCombination == 'product'
            or args.ParameterCombination == 'list')
    print(args)
    #print("args.ProcessCCosts:{}".format(args.ProcessCCosts))
    N = int(args.N)
    M = int(args.M)
    if args.geo_only:
        assert args.test == True, "option geo_only requires option test"
    if args.project == 'fromLocalFile':
        with open('projectname.txt', 'r') as f:
            projectDir = f.readline().rstrip('\n')
    else:
        #projectDir = os.path.join("/home/numerik/bzfmanle/Simulations/pypmj/projects",args.project)
        projectDir = args.project
    #projectDir = 'scattering/nanopillar_array_blochfamilies'
    #projectDir = 'scattering/photonic_crystals/slabs/hexagonal/half_spaces_BlochFamilies/'
    project = jpy.JCMProject(projectDir)

    keys = GenKeys.getKeys(args.DataSetName)
    keys['constants']['dataset_name'] = os.path.splitext(args.DataSetName)[0]
    #keys['constants']['spectra_storage_folder'] += args.DataSetName
    #keys['constants']['field_storage_folder'] += args.DataSetName
    if 'jones_matrix_storage_folder' in keys['constants']:
        keys['constants']['jones_matrix_storage_folder'] += args.DataSetName
        if not os.path.isdir(keys['constants']['jones_matrix_storage_folder']):
            os.makedirs(keys['constants']['jones_matrix_storage_folder'])

    if 'pml_log_folder' in keys['constants']:
        keys['constants']['pml_log_folder'] += args.DataSetName
        if not os.path.isdir(keys['constants']['pml_log_folder']):
            os.makedirs(keys['constants']['pml_log_folder'])

    #if not os.path.isdir(keys['constants']['spectra_storage_folder']):
    #    os.makedirs(keys['constants']['spectra_storage_folder'])

    if args.ParameterCombination == 'list':
        keys = RemoveSingletons(keys)

    simple_keys = jpy.utils.convert_keys(keys)
    #if simple_keys['vacuum_wavelength'] > 1e-5:
    #    raise ValueError('vacuum wavelength larger than 10000nm, is this correct?')

    from JCMProject_Utils import processing_function
    if args.test:
        import jcmwave as jcm
        fullprojectDir = _config.get('Data',
                                     'projects') + '/' + projectDir + '/'
        simple_keys['sim_number'] = 0
        if args.geo_only:
            jcm.jcmt2jcm(fullprojectDir + 'layout.jcmt', simple_keys)
            jcm.geo(fullprojectDir, simple_keys)
            jcm.view(fullprojectDir + '/grid.jcm')
        else:
            simple_keys['fem_degree_max'] = simple_keys['fem_degree_min']
            results = jcm.solve(fullprojectDir + '/project.jcmpt',
                                simple_keys,
                                mode='solve')
            #print(results)
            if args.ProcessCCosts:
                df = processing_function(results[0:], simple_keys)
            else:
                df = processing_function(results[1:], simple_keys)
            for item in df.items():
                print("{0}:{1}".format(item[0], item[1]))

    elif args.convergence is not None:
        import copy
        keys_test = copy.deepcopy(keys)
        try:
            keys_test['parameters'][args.convergence] = keys_test[
                'parameters'][args.convergence][0:-1]
        except KeyError:
            keys_test['geometry'][args.convergence] = keys_test['geometry'][
                args.convergence][0:-1]
        keys_ref = copy.deepcopy(keys)
        try:
            keys_ref['parameters'][args.convergence] = keys_ref['parameters'][
                args.convergence][-1:]
        except KeyError:
            keys_ref['geometry'][args.convergence] = keys_ref['geometry'][
                args.convergence][-1:]
        ctest = jpy.ConvergenceTest(project,
                                    keys_test,
                                    keys_ref,
                                    duplicate_path_levels=0,
                                    storage_folder='FBH_LEDs/' +
                                    args.DataSetName)
        ctest.use_only_resources(args.resource)
        ctest.resource_manager.resources.set_m_n_for_all(1, 32)
        ctest.make_simulation_schedule()
        ctest.run(N=1,
                  processing_func=processing_function,
                  pass_ccosts_to_processing_func=True)
        test = [
            'R_1', 'T_1', 'I_0', 'I_1', 'I_2', 'I_3', 'I_4', 'I_5', 'I_6',
            'I_7', 'I_8', 'I_9'
        ]
        ctest.analyze_convergence_results(test, data_ref=df)
        ctest.write_analyzed_data_to_file(file_path='results/' +
                                          args.DataSetName + '_Analysis')
    else:
        if args.Logs == 'keep':
            keepLogs = True
        elif args.Logs == 'delete':
            keepLogs = False

        if "storage_base" in keys['constants']:
            storage_base = keys['constants']['storage_base']
        else:
            storage_base = "from_config"
        print("args.resource: {}".format(args.resource))
        if ("transitional_storage_base" in keys['constants']
                and args.resource.startswith("z1")):
            trans_storage_base = keys['constants']['transitional_storage_base']
            print("setting trans storage base")
        else:
            trans_storage_base = None

        simuset = jpy.SimulationSet(
            project,
            keys,
            storage_folder=os.path.join(keys['constants']['storage_folder'],
                                        args.DataSetName),
            transitional_storage_base=trans_storage_base,
            storage_base=storage_base,
            combination_mode=args.ParameterCombination,
            store_logs=keepLogs,
            check_version_match=False)
        #combination_mode='list'
        resources = args.resource.split(",")
        print("resources: {}".format(resources))
        simuset.use_only_resources(resources)
        if N > 0:
            simuset.resource_manager.resources.set_m_n_for_all(M, N)
        simuset.make_simulation_schedule()
        import time
        start = time.time()
        if args.SingleSimulation == -1:
            simuset.run(N=args.NDemonJobs,
                        processing_func=processing_function,
                        pass_ccosts_to_processing_func=args.ProcessCCosts,
                        wdir_mode=args.WDirMode,
                        auto_rerun_failed=0)
            stop = time.time()
            print("Time for all simulations: {}".format(stop - start))
        else:
            print("solving sim {}".format(args.SingleSimulation))
            simuset.solve_single_simulation(
                int(args.SingleSimulation),
                processing_func=processing_function,
                wdir_mode=args.WDirMode)
        if simuset.get_store_data() is not None:
            simuset.write_store_data_to_file(file_path='results/' +
                                             args.DataSetName + '.csv')
            #simuset.write_store_data_to_file(mode='Excel',file_path='results/'+args.DataSetName+'.xls')
        simuset.close_store()