Compare commits
	
		
			No commits in common. "79227e93d9b74ba39b6341fd9faef33cd5654a15" and "075d11b948241e24305713d4e9e61380c2dc2bf8" have entirely different histories.
		
	
	
		
			79227e93d9
			...
			075d11b948
		
	
		
| @ -4,9 +4,6 @@ generate-batch-strong-cpu: | |||||||
| generate-batch-strong-gpu: | generate-batch-strong-gpu: | ||||||
| 	python scripts/substitute.py strong-batch.j2 < strong-gpu.json | 	python scripts/substitute.py strong-batch.j2 < strong-gpu.json | ||||||
| 
 | 
 | ||||||
| generate-batch-strong-booster: |  | ||||||
| 	python scripts/substitute.py strong-batch.j2 < strong-booster.json |  | ||||||
| 
 |  | ||||||
| clean-logs: | clean-logs: | ||||||
| 	rm logs/* | 	rm logs/* | ||||||
| 
 | 
 | ||||||
|  | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,9 +0,0 @@ | |||||||
| label	nodes	tasks	mean_time	std_time	speedup	speedup_std	speedup_error |  | ||||||
| 1	1	1	161.08257980000002	1.0725827874500897	1.0	0.0066585895804611986	0.004614167168572558 |  | ||||||
| 1	1	2	109.2771463	1.3498701967829918	1.474073813730255	0.018208823861030076	0.012618071172974463 |  | ||||||
| 1	1	4	94.5763083	2.921107861707173	1.7032022363258181	0.052605536545441436	0.03645377698685362 |  | ||||||
| 2	2	8	75.06436665	5.345617315509918	2.145926049720424	0.15281950626022228	0.10589851499069955 |  | ||||||
| 4	4	16	42.842002025	1.5314070839490197	3.759921856733072	0.13440013758310768	0.09313454370387199 |  | ||||||
| 8	8	32	16.40522446875	4.395440141154071	9.818980539208297	2.6307924825691393	1.823046180232846 |  | ||||||
| 16	16	64	9.361684956249999	5.010216046116417	17.206579857449583	9.208671612370724	6.381283859970849 |  | ||||||
| 32	32	128	5.214438346875	0.113661681579046	30.891645290338204	0.6733604113945479	0.4666149588180552 |  | ||||||
| 
 | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,10 +1,10 @@ | |||||||
| label	nodes	tasks	mean_time	std_time	speedup	speedup_std	speedup_error | label	nodes	mean_time	std_time	speedup	speedup_std | ||||||
| 1	1	48	1953.3832839708334	14.087268287606769	1.0	0.007211727674340593	0.004711662080569187 | 1	1	1132.1093720291667	18.428644622186628	1.0	0.016278148629010596 | ||||||
| 2	2	96	1046.3540047312501	6.0880471399828595	1.866847429396085	0.010861959816590314	0.007096480413505672 | 2	2	619.9614289104168	7.890810670766857	1.8260964621925766	0.029725469622481192 | ||||||
| 4	4	192	566.0709002166666	5.005298021298787	3.4507749527897755	0.030512356378918384	0.019934739500893344 | 4	4	348.657283046875	3.3739994706945122	3.247054993762918	0.052856043795043856 | ||||||
| 8	8	384	318.1225953708333	9.706195475255436	6.1403475024896865	0.18734731205020752	0.12240024387280224 | 8	8	200.79244575312498	1.259910347938215	5.63820699420684	0.09177957145282603 | ||||||
| 16	16	768	178.56471887994792	9.393026972005948	10.939357428631386	0.5754422263707719	0.375955587895571 | 16	16	111.37033198671875	0.3943541234366863	10.16526889911915	0.16547175799372044 | ||||||
| 32	32	1536	99.82801128216144	1.4413062581268035	19.56748670921274	0.28251330150299214	0.18457535698195485 | 32	32	65.69918741145833	0.43464214827532205	17.231710415823503	0.28050034328084494 | ||||||
| 64	64	3072	55.75610567220052	1.0303316198245824	35.034428255357376	0.6474103379133267	0.42297475410337343 | 64	64	38.56257490957031	0.12227397957602136	29.35772247273364	0.4778893698204027 | ||||||
| 128	128	6144	31.589132888118492	0.32226687791817415	61.83719226764697	0.6308523555205254	0.41215687227340997 | 128	128	21.433497051595047	0.14016683538819355	52.81962944749218	0.8598057786755426 | ||||||
| 256	256	12288	19.11704500200738	0.18528928846832715	102.18018965617955	0.9903672160087601	0.6470399144590566 | 256	256	13.247708324598525	0.030540850807946187	85.45699711149668	1.3910817003698723 | ||||||
|  | |||||||
| 
 | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,9 +1,8 @@ | |||||||
| label	nodes	tasks	mean_time	std_time	speedup	speedup_std	speedup_error | label	nodes	tasks	mean_time	std_time	speedup	speedup_std | ||||||
| 1	1	1	316.56674059999995	1.3298279828832311	1.0	0.004200782370133899	0.002910993666206366 | 1	1	1	157.5217688	0.5311809049610176	1.0	0.003372111099358209 | ||||||
| 1	1	2	239.7297573	1.3705192585818793	1.3205150005797797	0.007549297425250635	0.00523139621453709 | 1	1	2	120.15237200000001	0.299200156243067	1.3110167213344732	0.004420894037456185 | ||||||
| 1	1	4	150.86725470000002	1.463195211854327	2.098313124537819	0.020350616990413285	0.014102258089746373 | 1	1	4	75.69762635	0.5769735213369493	2.0809340582447473	0.007017140834839633 | ||||||
| 2	2	8	103.758313	1.3959932139830615	3.051001230137579	0.041049019495199714	0.028445519245192213 | 2	2	8	52.110670325	0.940887445857671	3.022831366735062	0.010193323203255446 | ||||||
| 4	4	16	56.423368849999996	0.8293394846143929	5.610560784514376	0.08246688711191473	0.057146637198176795 | 4	4	16	28.215493675000005	0.5598524922936691	5.582811012077745	0.018825858979446598 | ||||||
| 8	8	32	24.168551143749998	0.5503559531334744	13.09829202078025	0.29826872726631265	0.20668968287257275 | 8	8	32	12.422501156249998	0.31940690526235005	12.680358554102268	0.04275957782413007 | ||||||
| 16	16	64	15.05716248125	0.04648043269670786	21.024329185144023	0.06490066896072916	0.044973869063161365 | 16	16	64	7.70770194375	0.04068644910316383	20.43693048194875	0.06891560011499148 | ||||||
| 32	32	128	9.9111531140625	0.08848604506395903	31.940455056721632	0.28516203039001964	0.19760720531719309 |  | ||||||
|  | |||||||
| 
 | 
| @ -3,7 +3,6 @@ | |||||||
| 
 | 
 | ||||||
| import argparse | import argparse | ||||||
| import json | import json | ||||||
| import math |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def print_table(data, spec): | def print_table(data, spec): | ||||||
| @ -20,33 +19,18 @@ def print_table(data, spec): | |||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|     p = argparse.ArgumentParser(description="Turn files generated by timing.py into pgf datafiles") |     p = argparse.ArgumentParser(description="Turn files generated by timing.py into pgf datafiles") | ||||||
|     p.add_argument("timing_file") |     p.add_argument("timing_file") | ||||||
|     p.add_argument("--weak", action="store_true") |  | ||||||
|     args = p.parse_args() |     args = p.parse_args() | ||||||
| 
 | 
 | ||||||
|     with open(args.timing_file, "r", encoding="utf8") as f: |     with open(args.timing_file, "r", encoding="utf8") as f: | ||||||
|         jobs = json.load(f) |         jobs = json.load(f) | ||||||
| 
 | 
 | ||||||
|     if not args.weak: |     scaling_spec = { | ||||||
|         scaling_spec = { |         "label": lambda job: job["accounting"][0]["nodes"]["count"], | ||||||
|             "label": lambda job: job["accounting"][0]["nodes"]["count"], |         "nodes": lambda job: job["accounting"][0]["nodes"]["count"], | ||||||
|             "nodes": lambda job: job["accounting"][0]["nodes"]["count"], |         "tasks": lambda job: job["accounting"][0]["tasks"]["count"], | ||||||
|             "tasks": lambda job: job["accounting"][0]["tasks"]["count"], |         "mean_time": lambda job: job["means"]["TimeStep"], | ||||||
|             "mean_time": lambda job: job["means"]["TimeStep"], |         "std_time": lambda job: job["stds"]["TimeStep"], | ||||||
|             "std_time": lambda job: job["stds"]["TimeStep"], |         "speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"], | ||||||
|             "speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"], |         "speedup_std": lambda job: jobs[0]["stds"]["TimeStep"] / job["means"]["TimeStep"], | ||||||
|             # Standard deviation scaled to speedup |     } | ||||||
|             "speedup_std": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]), |  | ||||||
|             # 95% confidence interval |  | ||||||
|             "speedup_error": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]) / math.sqrt(len(jobs)) * 1.96, |  | ||||||
|         } |  | ||||||
|     else: |  | ||||||
|         scaling_spec = { |  | ||||||
|             "nodes": lambda job: job["accounting"][0]["nodes"]["count"], |  | ||||||
|             "tasks": lambda job: job["accounting"][0]["tasks"]["count"], |  | ||||||
|             "mean_time": lambda job: job["means"]["TimeStep"], |  | ||||||
|             "std_time": lambda job: job["stds"]["TimeStep"], |  | ||||||
|             "efficiency": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"], |  | ||||||
|             "efficiency_error": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]) / math.sqrt(len(jobs)) * 1.96, |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     print_table(jobs, scaling_spec) |     print_table(jobs, scaling_spec) | ||||||
|  | |||||||
| @ -1,34 +0,0 @@ | |||||||
| #!/usr/bin/env python |  | ||||||
| 
 |  | ||||||
| import copy |  | ||||||
| import json |  | ||||||
| 
 |  | ||||||
| from pathlib import Path |  | ||||||
| 
 |  | ||||||
| SIZE = [384, 384, 384] |  | ||||||
| 
 |  | ||||||
| with (Path(__file__).parent.parent / "templates" / "strong-booster.json").open(encoding="utf8") as f: |  | ||||||
|     template = json.load(f) |  | ||||||
| 
 |  | ||||||
| configs = [ |  | ||||||
|     [  1,  1,  1], |  | ||||||
|     [  1,  1,  2], |  | ||||||
|     [  1,  2,  2], |  | ||||||
|     [  2,  2,  2], |  | ||||||
|     [  2,  2,  4], |  | ||||||
|     [  2,  4,  4], |  | ||||||
|     [  4,  4,  4], |  | ||||||
|     [  4,  4,  8], |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| out_path = Path(__file__).parent.parent / "generated" / "config" |  | ||||||
| 
 |  | ||||||
| for c in configs: |  | ||||||
|     nc = copy.deepcopy(template) |  | ||||||
|     nc["Geometry"]["blockcount"] = c |  | ||||||
|     nc["Geometry"]["blocksize"] = [bs // bc for bc, bs in zip(c, SIZE)] |  | ||||||
| 
 |  | ||||||
|     nc_out_path = out_path / f"strong-booster-{c[0]:02}-{c[1]:02}-{c[2]:02}.json" |  | ||||||
|     print(f"Dumping {(c[0] * c[1] * c[2])} to {nc_out_path}") |  | ||||||
|     with nc_out_path.open("w", encoding="utf8") as f: |  | ||||||
|         json.dump(nc, f) |  | ||||||
| @ -1,152 +0,0 @@ | |||||||
| #!/usr/bin/env python |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import jinja2 |  | ||||||
| import json |  | ||||||
| import sys |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| from dataclasses import dataclass |  | ||||||
| from pathlib import Path |  | ||||||
| from typing import Tuple |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| SIZE = (192, 192, 192) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| templates_env = jinja2.Environment( |  | ||||||
|     loader=jinja2.FileSystemLoader(Path(__file__).parent.parent / "templates"), |  | ||||||
|     autoescape=jinja2.select_autoescape() |  | ||||||
| ) |  | ||||||
|          |  | ||||||
| 
 |  | ||||||
| @dataclass |  | ||||||
| class Experiment: |  | ||||||
|     job_name: str |  | ||||||
|     account: str |  | ||||||
|     partition: str |  | ||||||
|     nastja_binary_path: str |  | ||||||
|     nodes: int |  | ||||||
|     tasks: int |  | ||||||
|     num_blocks: Tuple[int, int, int] |  | ||||||
|     domain_scale: Tuple[int, int, int] |  | ||||||
|     time: str = "00:15:00" |  | ||||||
|     extra_sbatch_line: str = "" |  | ||||||
|     logfile_path: str = "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a" |  | ||||||
|     config_path: str = "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json" |  | ||||||
|     output_dir_path: str = "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}" |  | ||||||
| 
 |  | ||||||
|     def get_config(self): |  | ||||||
|         with (Path(__file__).parent.parent / "templates" / "weak.json").open(encoding="utf8") as f: |  | ||||||
|             config = json.load(f) |  | ||||||
| 
 |  | ||||||
|         size = ( |  | ||||||
|             SIZE[0] * self.domain_scale[0], |  | ||||||
|             SIZE[1] * self.domain_scale[1], |  | ||||||
|             SIZE[2] * self.domain_scale[2], |  | ||||||
|         ) |  | ||||||
|         blocksize = ( |  | ||||||
|             size[0] // self.num_blocks[0], |  | ||||||
|             size[1] // self.num_blocks[1], |  | ||||||
|             size[2] // self.num_blocks[2], |  | ||||||
|         ) |  | ||||||
|         config["Geometry"] = { |  | ||||||
|             "blockcount": list(self.num_blocks), |  | ||||||
|             "blocksize": list(blocksize), |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         cells_filling = [{ |  | ||||||
|             "box": [ |  | ||||||
|                 [0, 0, 0], |  | ||||||
|                 list(size) |  | ||||||
|             ], |  | ||||||
|             "celltype": 0, |  | ||||||
|             "component": 0, |  | ||||||
|             "pattern": "const", |  | ||||||
|             "seed": 0, |  | ||||||
|             "shape": "cube", |  | ||||||
|             "value": 0, |  | ||||||
|         }] |  | ||||||
|         for z in range(self.domain_scale[2]): |  | ||||||
|             for y in range(self.domain_scale[1]): |  | ||||||
|                 for x in range(self.domain_scale[0]): |  | ||||||
|                     cx = x * SIZE[0] + SIZE[0] // 2 |  | ||||||
|                     cy = y * SIZE[1] + SIZE[1] // 2 |  | ||||||
|                     cz = z * SIZE[2] + SIZE[2] // 2 |  | ||||||
|                     cells_filling.append({ |  | ||||||
|                         "shape": "sphere", |  | ||||||
|                         "pattern": "voronoi", |  | ||||||
|                         "count": 715, |  | ||||||
|                         "radius": 38, |  | ||||||
|                         "center": [cx, cy, cz], |  | ||||||
|                         "box": [ |  | ||||||
|                             [cx - 38, cy - 38, cz - 38], |  | ||||||
|                             [cx + 38, cy + 38, cz + 38] |  | ||||||
|                         ], |  | ||||||
|                         "celltype": 9, |  | ||||||
|                         "seed": 758960, |  | ||||||
|                     }) |  | ||||||
| 
 |  | ||||||
|         config["Filling"]["cells"] = cells_filling |  | ||||||
| 
 |  | ||||||
|         return config |  | ||||||
|      |  | ||||||
|     def write_batch_file(self, out_path: Path): |  | ||||||
|         t = templates_env.get_template("strong-batch.j2") |  | ||||||
|         t.stream( |  | ||||||
|             name=self.job_name, |  | ||||||
|             account=self.account, |  | ||||||
|             partition=self.partition, |  | ||||||
|             nodes=self.nodes, |  | ||||||
|             tasks=self.tasks, |  | ||||||
|             extra_sbatch_line=self.extra_sbatch_line, |  | ||||||
|             time=self.time, |  | ||||||
|             logfile_path=self.logfile_path, |  | ||||||
|             nastja_binary_path=self.nastja_binary_path, |  | ||||||
|             config_path=self.config_path, |  | ||||||
|             output_dir_path=self.output_dir_path, |  | ||||||
|         ).dump(str(out_path)) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def make_cpu_ex(x: int, y: int, z: int) -> Experiment: |  | ||||||
|     num_blocks = x * y * z |  | ||||||
|     assert num_blocks % 48 == 0 |  | ||||||
|     num_nodes = num_blocks // 48 |  | ||||||
| 
 |  | ||||||
|     assert x % 4 == 0 |  | ||||||
|     assert y % 4 == 0 |  | ||||||
|     assert z % 3 == 0 |  | ||||||
| 
 |  | ||||||
|     return Experiment( |  | ||||||
|         job_name=f"weak-cpu-{x:02}-{y:02}-{z:02}", |  | ||||||
|         account="cellsinsilico", |  | ||||||
|         partition="batch", |  | ||||||
|         nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-nocuda/nastja", |  | ||||||
|         nodes=num_nodes, |  | ||||||
|         tasks=num_blocks, |  | ||||||
|         num_blocks=(x, y, z), |  | ||||||
|         domain_scale=(x // 4, y // 4, z // 3), |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| experiments = [ |  | ||||||
|     make_cpu_ex(4, 4, 3), |  | ||||||
|     make_cpu_ex(4, 4, 6), |  | ||||||
|     make_cpu_ex(4, 4, 12), |  | ||||||
|     make_cpu_ex(4, 8, 12), |  | ||||||
|     make_cpu_ex(8, 8, 12), |  | ||||||
|     make_cpu_ex(8, 8, 24), |  | ||||||
|     make_cpu_ex(8, 16, 24), |  | ||||||
|     make_cpu_ex(16, 16, 24), |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| if __name__ == "__main__": |  | ||||||
|     outdir = Path(__file__).parent.parent / "generated" |  | ||||||
| 
 |  | ||||||
|     for e in experiments: |  | ||||||
|         print(f"Generating config for {e.job_name}", file=sys.stderr) |  | ||||||
|         config_path = (outdir / "config" / e.job_name).with_suffix(".json") |  | ||||||
|         with config_path.open("w", encoding="utf8") as f: |  | ||||||
|             json.dump(e.get_config(), f, indent=2) |  | ||||||
|         print(f"Generating batch file for {e.job_name}", file=sys.stderr) |  | ||||||
|         e.write_batch_file(outdir / "batch" / e.job_name) |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| #!/usr/bin/env python |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import argparse |  | ||||||
| import pandas |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def show_seconds(s: float) -> str: |  | ||||||
|     return f"{s:.2f}s" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == '__main__': |  | ||||||
|     p = argparse.ArgumentParser(description="Make a latex table from a timings tsv") |  | ||||||
|     p.add_argument("timingfile") |  | ||||||
|     args = p.parse_args() |  | ||||||
| 
 |  | ||||||
|     df = pandas.read_csv(args.timingfile, sep="\t") |  | ||||||
| 
 |  | ||||||
|     for i in range(len(df)): |  | ||||||
|         print(f"{df['nodes'][i]} & {df['tasks'][i]} & {show_seconds(df['mean_time'][i])} & {show_seconds(df['std_time'][i])} & {df['speedup'][i]:.02f} & {df['speedup_error'][i]:.02f} \\\\") |  | ||||||
| @ -44,13 +44,12 @@ def get_outdirs(jobid: str): | |||||||
|     return sorted(Path("/p/scratch/cellsinsilico/paul/nastja-out").glob(f"*{jobid}*")) |     return sorted(Path("/p/scratch/cellsinsilico/paul/nastja-out").glob(f"*{jobid}*")) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def load_array_mean_timings(jobid: str, excluded_array_indices): | def load_array_mean_timings(jobid: str): | ||||||
|     mts = [] |     mts = [ | ||||||
|     for outdir_path in get_outdirs(jobid): |         load_mean_timings(outdir_path) | ||||||
|         if any(str(outdir_path).endswith(str(i)) for i in excluded_array_indices): |         for outdir_path | ||||||
|             print(f"Not loading timings for {outdir_path} because it was excluded.", file=sys.stderr) |         in get_outdirs(jobid) | ||||||
|             continue |     ] | ||||||
|         mts.append(load_mean_timings(outdir_path)) |  | ||||||
| 
 | 
 | ||||||
|     return pandas.DataFrame(list(mts), columns=mts[0].index) |     return pandas.DataFrame(list(mts), columns=mts[0].index) | ||||||
| 
 | 
 | ||||||
| @ -76,37 +75,18 @@ if __name__ == "__main__": | |||||||
|     p = argparse.ArgumentParser(description="Load and analzye data from nastja timing files") |     p = argparse.ArgumentParser(description="Load and analzye data from nastja timing files") | ||||||
|     p.add_argument("jobid", nargs="+") |     p.add_argument("jobid", nargs="+") | ||||||
|     p.add_argument("--prettify", action="store_true") |     p.add_argument("--prettify", action="store_true") | ||||||
|     p.add_argument("--dump-timings", action="store_true") |  | ||||||
|     args = p.parse_args() |     args = p.parse_args() | ||||||
| 
 | 
 | ||||||
|     results = [] |     results = [] | ||||||
|     for i, jobid in enumerate(args.jobid, 1): |     for i, jobid in enumerate(args.jobid, 1): | ||||||
|         print(f"({i:2}/{len(args.jobid):2}) Loading accounting data for {jobid}", file=sys.stderr) |         print(f"({i:2}/{len(args.jobid):2}) Loading accounting data for {jobid}", file=sys.stderr) | ||||||
|         accounting_data = get_accounting_data(jobid) |         accounting_data = get_accounting_data(jobid) | ||||||
| 
 |         array_mean_timings = load_array_mean_timings(jobid) | ||||||
|         jobs = [] |  | ||||||
|         excluded_array_indices = [] |  | ||||||
|         for array_job in accounting_data["jobs"]: |  | ||||||
|             # Get metadata related to array |  | ||||||
|             array_main_job = array_job["array"]["job_id"] |  | ||||||
|             array_index = array_job["array"]["task_id"] |  | ||||||
|             # The last step is the actual job we want the data for |  | ||||||
|             # The steps before set up cluster etc. |  | ||||||
|             last_step = array_job["steps"][-1] |  | ||||||
|             if last_step["state"] != "COMPLETED": |  | ||||||
|                 print(f"WARNING: {array_main_job}.{array_index} has state {last_step['state']}, excluding it from measurements", file=sys.stderr) |  | ||||||
|                 excluded_array_indices.append(array_index) |  | ||||||
|                 continue |  | ||||||
|             jobs.append(last_step) |  | ||||||
| 
 |  | ||||||
|         array_mean_timings = load_array_mean_timings(jobid, excluded_array_indices) |  | ||||||
|         if args.dump_timings: |  | ||||||
|             print(array_mean_timings, file=sys.stderr) |  | ||||||
| 
 | 
 | ||||||
|         results.append({ |         results.append({ | ||||||
|             "jobid": jobid, |             "jobid": jobid, | ||||||
|             "means": array_mean_timings.mean().to_dict(), |             "means": array_mean_timings.mean().to_dict(), | ||||||
|             "stds": array_mean_timings.std().to_dict(), |             "stds": array_mean_timings.std().to_dict(), | ||||||
|             "accounting": jobs |             "accounting": [array_job["steps"][-1] for array_job in accounting_data["jobs"]] | ||||||
|         }) |         }) | ||||||
|     print(json.dumps(results, indent=2 if args.prettify else None)) |     print(json.dumps(results, indent=2 if args.prettify else None)) | ||||||
|  | |||||||
| @ -1,63 +0,0 @@ | |||||||
| { |  | ||||||
|   "common": { |  | ||||||
|     "account": "hkf6", |  | ||||||
|     "partition": "booster", |  | ||||||
|     "extra_sbatch_line": "#SBATCH --gres=gpu:4", |  | ||||||
|     "logfile_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a", |  | ||||||
|     "nastja_binary_path": "/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja", |  | ||||||
|     "config_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json", |  | ||||||
|     "output_dir_path": "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}" |  | ||||||
|   }, |  | ||||||
|   "batches": [ |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-01-01-01", |  | ||||||
|       "nodes": 1, |  | ||||||
|       "tasks": 1, |  | ||||||
|       "time": "00:15:00", |  | ||||||
|       "extra_sbatch_line": "#SBATCH --gres=gpu:1" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-01-01-02", |  | ||||||
|       "nodes": 1, |  | ||||||
|       "tasks": 2, |  | ||||||
|       "time": "00:15:00", |  | ||||||
|       "extra_sbatch_line": "#SBATCH --gres=gpu:2" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-01-02-02", |  | ||||||
|       "nodes": 1, |  | ||||||
|       "tasks": 4, |  | ||||||
|       "time": "00:15:00" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-02-02-02", |  | ||||||
|       "nodes": 2, |  | ||||||
|       "tasks": 8, |  | ||||||
|       "time": "00:15:00" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-02-02-04", |  | ||||||
|       "nodes": 4, |  | ||||||
|       "tasks": 16, |  | ||||||
|       "time": "00:15:00" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-02-04-04", |  | ||||||
|       "nodes": 8, |  | ||||||
|       "tasks": 32, |  | ||||||
|       "time": "00:15:00" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-04-04-04", |  | ||||||
|       "nodes": 16, |  | ||||||
|       "tasks": 64, |  | ||||||
|       "time": "00:15:00" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "strong-booster-04-04-08", |  | ||||||
|       "nodes": 32, |  | ||||||
|       "tasks": 128, |  | ||||||
|       "time": "00:15:00" |  | ||||||
|     } |  | ||||||
|   ] |  | ||||||
| } |  | ||||||
| @ -13,19 +13,19 @@ | |||||||
|       "name": "strong-cpu-04-04-03", |       "name": "strong-cpu-04-04-03", | ||||||
|       "nodes": 1, |       "nodes": 1, | ||||||
|       "tasks": 48, |       "tasks": 48, | ||||||
|       "time": "01:00:00" |       "time": "00:30:00" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "name": "strong-cpu-04-04-06", |       "name": "strong-cpu-04-04-06", | ||||||
|       "nodes": 2, |       "nodes": 2, | ||||||
|       "tasks": 96, |       "tasks": 96, | ||||||
|       "time": "01:00:00" |       "time": "00:30:00" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "name": "strong-cpu-04-04-12", |       "name": "strong-cpu-04-04-12", | ||||||
|       "nodes": 4, |       "nodes": 4, | ||||||
|       "tasks": 192, |       "tasks": 192, | ||||||
|       "time": "00:20:00" |       "time": "00:10:00" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "name": "strong-cpu-04-08-12", |       "name": "strong-cpu-04-08-12", | ||||||
|  | |||||||
| @ -1,263 +0,0 @@ | |||||||
| { |  | ||||||
|   "Application": "Cells", |  | ||||||
|   "CellsInSilico": { |  | ||||||
|     "2D": false, |  | ||||||
|     "adhesion": { |  | ||||||
|       "matrix": [ |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0] |  | ||||||
|       ], |  | ||||||
|       "polarityenabled": false |  | ||||||
|     }, |  | ||||||
|     "centerofmass": { |  | ||||||
|       "steps": 1 |  | ||||||
|     }, |  | ||||||
|     "cleaner": { |  | ||||||
|       "killdistance": 0, |  | ||||||
|       "steps": 100 |  | ||||||
|     }, |  | ||||||
|     "contactinhibition": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "division": { |  | ||||||
|       "condition": [ |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "( volume >= 0.9 * volume0 )  & ( rnd() <= 0.00001 ) & generation < 1" |  | ||||||
|       ], |  | ||||||
|       "enabled": true, |  | ||||||
|       "halveSignals": false |  | ||||||
|     }, |  | ||||||
|     "dynamicecm": { |  | ||||||
|       "alpha": 2.0, |  | ||||||
|       "beta": 0.5, |  | ||||||
|       "c": 4.0, |  | ||||||
|       "deltat": 0.10000000149011612, |  | ||||||
|       "ecmCellID": 0, |  | ||||||
|       "enabled": true, |  | ||||||
|       "eta": 0.25, |  | ||||||
|       "k0": 0.10000000149011612, |  | ||||||
|       "k1": 0.10000000149011612, |  | ||||||
|       "lambda": 10.0, |  | ||||||
|       "phi": 1.0, |  | ||||||
|       "pushSteps": 10, |  | ||||||
|       "pushWeight": 0.5, |  | ||||||
|       "stepsPerMcs": 100 |  | ||||||
|     }, |  | ||||||
|     "ecmdegradation": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "energyfunctions": [ |  | ||||||
|       "Volume00", |  | ||||||
|       "Surface01", |  | ||||||
|       "Motility00", |  | ||||||
|       "Adhesion01", |  | ||||||
|       "DynamicECM00" |  | ||||||
|     ], |  | ||||||
|     "liquid": 6, |  | ||||||
|     "logcellproperties": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "orientation": { |  | ||||||
|       "enabled": true, |  | ||||||
|       "motility": "persistentRandomWalk", |  | ||||||
|       "motilityamount": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0 |  | ||||||
|       ], |  | ||||||
|       "numRandomNumbers": 5, |  | ||||||
|       "persistenceMagnitude": 0.0, |  | ||||||
|       "persistentDecay": 0.8, |  | ||||||
|       "recalculationtime": 200 |  | ||||||
|     }, |  | ||||||
|     "polarity": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "signaling": { |  | ||||||
|       "constant": false, |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "surface": { |  | ||||||
|       "default": { |  | ||||||
|         "storage": "const", |  | ||||||
|         "value": 400.0 |  | ||||||
|       }, |  | ||||||
|       "lambda": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         5.625, |  | ||||||
|         5.625, |  | ||||||
|         1.0 |  | ||||||
|       ], |  | ||||||
|       "sizechange": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         -0.05, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0 |  | ||||||
|       ] |  | ||||||
|     }, |  | ||||||
|     "temperature": 50.0, |  | ||||||
|     "visitor": { |  | ||||||
|       "checkerboard": "01", |  | ||||||
|       "stepwidth": 10 |  | ||||||
|     }, |  | ||||||
|     "volume": { |  | ||||||
|       "default": { |  | ||||||
|         "storage": "const", |  | ||||||
|         "value": 500.0 |  | ||||||
|       }, |  | ||||||
|       "lambda": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         7.5, |  | ||||||
|         7.5, |  | ||||||
|         7.5 |  | ||||||
|       ], |  | ||||||
|       "sizechange": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         -0.05, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0 |  | ||||||
|       ] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   "DefineFunctions": [ |  | ||||||
|     "r_angle()=360*rnd()", |  | ||||||
|     "r_size()=400*rnd()" |  | ||||||
|   ], |  | ||||||
|   "Filling": { |  | ||||||
|     "cells": [ |  | ||||||
|       { |  | ||||||
|         "box": [ |  | ||||||
|           [ |  | ||||||
|             0, |  | ||||||
|             0, |  | ||||||
|             0 |  | ||||||
|           ], |  | ||||||
|           [ |  | ||||||
|             384, |  | ||||||
|             384, |  | ||||||
|             384 |  | ||||||
|           ] |  | ||||||
|         ], |  | ||||||
|         "celltype": 0, |  | ||||||
|         "component": 0, |  | ||||||
|         "pattern": "const", |  | ||||||
|         "seed": 0, |  | ||||||
|         "shape": "cube", |  | ||||||
|         "value": 0 |  | ||||||
|       }, |  | ||||||
|       { |  | ||||||
|         "box": [ |  | ||||||
|           [117, 117, 177], |  | ||||||
|           [267, 267, 267] |  | ||||||
|         ], |  | ||||||
|         "celltype": 9, |  | ||||||
|         "center": [192, 192, 192], |  | ||||||
|         "component": 0, |  | ||||||
|         "count": 5500, |  | ||||||
|         "pattern": "voronoi", |  | ||||||
|         "radius": 75, |  | ||||||
|         "seed": 758960, |  | ||||||
|         "shape": "sphere", |  | ||||||
|         "value": 8 |  | ||||||
|       } |  | ||||||
|     ], |  | ||||||
|     "initialoutput": false, |  | ||||||
|     "randomseed": 758959 |  | ||||||
|   }, |  | ||||||
|   "Geometry": { |  | ||||||
|     "blockcount": [ |  | ||||||
|       4, |  | ||||||
|       4, |  | ||||||
|       3 |  | ||||||
|     ], |  | ||||||
|     "blockdefault": "fill", |  | ||||||
|     "blocksize": [ |  | ||||||
|       96, |  | ||||||
|       96, |  | ||||||
|       128 |  | ||||||
|     ], |  | ||||||
|     "blocktype": [ |  | ||||||
|       [ |  | ||||||
|         [ |  | ||||||
|           1 |  | ||||||
|         ] |  | ||||||
|       ] |  | ||||||
|     ] |  | ||||||
|   }, |  | ||||||
|   "Settings": { |  | ||||||
|     "deltat": 1.0, |  | ||||||
|     "deltax": 1.0, |  | ||||||
|     "handleFPE": "signal", |  | ||||||
|     "logger": { |  | ||||||
|       "group": 0, |  | ||||||
|       "steps": 100 |  | ||||||
|     }, |  | ||||||
|     "randomseed": 42, |  | ||||||
|     "statusoutput": 1, |  | ||||||
|     "timestepguard": 1, |  | ||||||
|     "timesteps": 10, |  | ||||||
|     "cuda": { |  | ||||||
|       "subblocks": { |  | ||||||
|         "blockDim": [8, 8, 8] |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -253,6 +253,6 @@ | |||||||
|     "randomseed": 42, |     "randomseed": 42, | ||||||
|     "statusoutput": 1, |     "statusoutput": 1, | ||||||
|     "timestepguard": 1, |     "timestepguard": 1, | ||||||
|     "timesteps": 10 |     "timesteps": 5 | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -253,7 +253,7 @@ | |||||||
|     "randomseed": 42, |     "randomseed": 42, | ||||||
|     "statusoutput": 1, |     "statusoutput": 1, | ||||||
|     "timestepguard": 1, |     "timestepguard": 1, | ||||||
|     "timesteps": 10, |     "timesteps": 5, | ||||||
|     "cuda": { |     "cuda": { | ||||||
|       "subblocks": { |       "subblocks": { | ||||||
|         "blockDim": [8, 8, 8] |         "blockDim": [8, 8, 8] | ||||||
|  | |||||||
| @ -1,193 +0,0 @@ | |||||||
| { |  | ||||||
|   "Application": "Cells", |  | ||||||
|   "CellsInSilico": { |  | ||||||
|     "2D": false, |  | ||||||
|     "adhesion": { |  | ||||||
|       "matrix": [ |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], |  | ||||||
|         [0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0] |  | ||||||
|       ], |  | ||||||
|       "polarityenabled": false |  | ||||||
|     }, |  | ||||||
|     "centerofmass": { |  | ||||||
|       "steps": 1 |  | ||||||
|     }, |  | ||||||
|     "cleaner": { |  | ||||||
|       "killdistance": 0, |  | ||||||
|       "steps": 100 |  | ||||||
|     }, |  | ||||||
|     "contactinhibition": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "division": { |  | ||||||
|       "condition": [ |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "", |  | ||||||
|         "( volume >= 0.9 * volume0 )  & ( rnd() <= 0.00001 ) & generation < 1" |  | ||||||
|       ], |  | ||||||
|       "enabled": true, |  | ||||||
|       "halveSignals": false |  | ||||||
|     }, |  | ||||||
|     "dynamicecm": { |  | ||||||
|       "alpha": 2.0, |  | ||||||
|       "beta": 0.5, |  | ||||||
|       "c": 4.0, |  | ||||||
|       "deltat": 0.1, |  | ||||||
|       "ecmCellID": 0, |  | ||||||
|       "enabled": true, |  | ||||||
|       "eta": 0.25, |  | ||||||
|       "k0": 0.1, |  | ||||||
|       "k1": 0.1, |  | ||||||
|       "lambda": 10.0, |  | ||||||
|       "phi": 1.0, |  | ||||||
|       "pushSteps": 10, |  | ||||||
|       "pushWeight": 0.5, |  | ||||||
|       "stepsPerMcs": 100 |  | ||||||
|     }, |  | ||||||
|     "ecmdegradation": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "energyfunctions": [ |  | ||||||
|       "Volume00", |  | ||||||
|       "Surface01", |  | ||||||
|       "Motility00", |  | ||||||
|       "Adhesion01", |  | ||||||
|       "DynamicECM00" |  | ||||||
|     ], |  | ||||||
|     "liquid": 6, |  | ||||||
|     "logcellproperties": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "orientation": { |  | ||||||
|       "enabled": true, |  | ||||||
|       "motility": "persistentRandomWalk", |  | ||||||
|       "motilityamount": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0 |  | ||||||
|       ], |  | ||||||
|       "numRandomNumbers": 5, |  | ||||||
|       "persistenceMagnitude": 0.0, |  | ||||||
|       "persistentDecay": 0.8, |  | ||||||
|       "recalculationtime": 200 |  | ||||||
|     }, |  | ||||||
|     "polarity": { |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "signaling": { |  | ||||||
|       "constant": false, |  | ||||||
|       "enabled": false |  | ||||||
|     }, |  | ||||||
|     "surface": { |  | ||||||
|       "default": { |  | ||||||
|         "storage": "const", |  | ||||||
|         "value": 400.0 |  | ||||||
|       }, |  | ||||||
|       "lambda": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         5.625, |  | ||||||
|         5.625, |  | ||||||
|         1.0 |  | ||||||
|       ], |  | ||||||
|       "sizechange": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         -0.05, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0 |  | ||||||
|       ] |  | ||||||
|     }, |  | ||||||
|     "temperature": 50.0, |  | ||||||
|     "visitor": { |  | ||||||
|       "checkerboard": "01", |  | ||||||
|       "stepwidth": 10 |  | ||||||
|     }, |  | ||||||
|     "volume": { |  | ||||||
|       "default": { |  | ||||||
|         "storage": "const", |  | ||||||
|         "value": 500.0 |  | ||||||
|       }, |  | ||||||
|       "lambda": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         7.5, |  | ||||||
|         7.5, |  | ||||||
|         7.5 |  | ||||||
|       ], |  | ||||||
|       "sizechange": [ |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         -0.05, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0, |  | ||||||
|         0.0 |  | ||||||
|       ] |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   "DefineFunctions": [ |  | ||||||
|     "r_angle()=360*rnd()", |  | ||||||
|     "r_size()=400*rnd()" |  | ||||||
|   ], |  | ||||||
|   "Filling": { |  | ||||||
|     "initialoutput": false, |  | ||||||
|     "randomseed": 758959 |  | ||||||
|   }, |  | ||||||
|   "Settings": { |  | ||||||
|     "randomseed": 42, |  | ||||||
|     "statusoutput": 1, |  | ||||||
|     "timesteps": 10 |  | ||||||
|   } |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user