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())
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()
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)
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()
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()
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)
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)
'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))
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()
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()