Compare commits
	
		
			3 Commits
		
	
	
		
			075d11b948
			...
			79227e93d9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 79227e93d9 | |||
| d41d8b564b | |||
| 59d5935567 | 
| @ -4,6 +4,9 @@ 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/* | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								experiments/eval/data/strong-booster-timings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								experiments/eval/data/strong-booster-timings.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										9
									
								
								experiments/eval/data/strong-booster.tsv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								experiments/eval/data/strong-booster.tsv
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | 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	mean_time	std_time	speedup	speedup_std | label	nodes	tasks	mean_time	std_time	speedup	speedup_std	speedup_error | ||||||
| 1	1	1132.1093720291667	18.428644622186628	1.0	0.016278148629010596 | 1	1	48	1953.3832839708334	14.087268287606769	1.0	0.007211727674340593	0.004711662080569187 | ||||||
| 2	2	619.9614289104168	7.890810670766857	1.8260964621925766	0.029725469622481192 | 2	2	96	1046.3540047312501	6.0880471399828595	1.866847429396085	0.010861959816590314	0.007096480413505672 | ||||||
| 4	4	348.657283046875	3.3739994706945122	3.247054993762918	0.052856043795043856 | 4	4	192	566.0709002166666	5.005298021298787	3.4507749527897755	0.030512356378918384	0.019934739500893344 | ||||||
| 8	8	200.79244575312498	1.259910347938215	5.63820699420684	0.09177957145282603 | 8	8	384	318.1225953708333	9.706195475255436	6.1403475024896865	0.18734731205020752	0.12240024387280224 | ||||||
| 16	16	111.37033198671875	0.3943541234366863	10.16526889911915	0.16547175799372044 | 16	16	768	178.56471887994792	9.393026972005948	10.939357428631386	0.5754422263707719	0.375955587895571 | ||||||
| 32	32	65.69918741145833	0.43464214827532205	17.231710415823503	0.28050034328084494 | 32	32	1536	99.82801128216144	1.4413062581268035	19.56748670921274	0.28251330150299214	0.18457535698195485 | ||||||
| 64	64	38.56257490957031	0.12227397957602136	29.35772247273364	0.4778893698204027 | 64	64	3072	55.75610567220052	1.0303316198245824	35.034428255357376	0.6474103379133267	0.42297475410337343 | ||||||
| 128	128	21.433497051595047	0.14016683538819355	52.81962944749218	0.8598057786755426 | 128	128	6144	31.589132888118492	0.32226687791817415	61.83719226764697	0.6308523555205254	0.41215687227340997 | ||||||
| 256	256	13.247708324598525	0.030540850807946187	85.45699711149668	1.3910817003698723 | 256	256	12288	19.11704500200738	0.18528928846832715	102.18018965617955	0.9903672160087601	0.6470399144590566 | ||||||
|  | |||||||
| 
 | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,8 +1,9 @@ | |||||||
| label	nodes	tasks	mean_time	std_time	speedup	speedup_std | label	nodes	tasks	mean_time	std_time	speedup	speedup_std	speedup_error | ||||||
| 1	1	1	157.5217688	0.5311809049610176	1.0	0.003372111099358209 | 1	1	1	316.56674059999995	1.3298279828832311	1.0	0.004200782370133899	0.002910993666206366 | ||||||
| 1	1	2	120.15237200000001	0.299200156243067	1.3110167213344732	0.004420894037456185 | 1	1	2	239.7297573	1.3705192585818793	1.3205150005797797	0.007549297425250635	0.00523139621453709 | ||||||
| 1	1	4	75.69762635	0.5769735213369493	2.0809340582447473	0.007017140834839633 | 1	1	4	150.86725470000002	1.463195211854327	2.098313124537819	0.020350616990413285	0.014102258089746373 | ||||||
| 2	2	8	52.110670325	0.940887445857671	3.022831366735062	0.010193323203255446 | 2	2	8	103.758313	1.3959932139830615	3.051001230137579	0.041049019495199714	0.028445519245192213 | ||||||
| 4	4	16	28.215493675000005	0.5598524922936691	5.582811012077745	0.018825858979446598 | 4	4	16	56.423368849999996	0.8293394846143929	5.610560784514376	0.08246688711191473	0.057146637198176795 | ||||||
| 8	8	32	12.422501156249998	0.31940690526235005	12.680358554102268	0.04275957782413007 | 8	8	32	24.168551143749998	0.5503559531334744	13.09829202078025	0.29826872726631265	0.20668968287257275 | ||||||
| 16	16	64	7.70770194375	0.04068644910316383	20.43693048194875	0.06891560011499148 | 16	16	64	15.05716248125	0.04648043269670786	21.024329185144023	0.06490066896072916	0.044973869063161365 | ||||||
|  | 32	32	128	9.9111531140625	0.08848604506395903	31.940455056721632	0.28516203039001964	0.19760720531719309 | ||||||
|  | |||||||
| 
 | 
| @ -3,6 +3,7 @@ | |||||||
| 
 | 
 | ||||||
| import argparse | import argparse | ||||||
| import json | import json | ||||||
|  | import math | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def print_table(data, spec): | def print_table(data, spec): | ||||||
| @ -19,18 +20,33 @@ 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) | ||||||
| 
 | 
 | ||||||
|     scaling_spec = { |     if not args.weak: | ||||||
|         "label": lambda job: job["accounting"][0]["nodes"]["count"], |         scaling_spec = { | ||||||
|         "nodes": lambda job: job["accounting"][0]["nodes"]["count"], |             "label": lambda job: job["accounting"][0]["nodes"]["count"], | ||||||
|         "tasks": lambda job: job["accounting"][0]["tasks"]["count"], |             "nodes": lambda job: job["accounting"][0]["nodes"]["count"], | ||||||
|         "mean_time": lambda job: job["means"]["TimeStep"], |             "tasks": lambda job: job["accounting"][0]["tasks"]["count"], | ||||||
|         "std_time": lambda job: job["stds"]["TimeStep"], |             "mean_time": lambda job: job["means"]["TimeStep"], | ||||||
|         "speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"], |             "std_time": lambda job: job["stds"]["TimeStep"], | ||||||
|         "speedup_std": lambda job: jobs[0]["stds"]["TimeStep"] / job["means"]["TimeStep"], |             "speedup": lambda job: jobs[0]["means"]["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) | ||||||
|  | |||||||
							
								
								
									
										34
									
								
								experiments/eval/scripts/generate-strong-booster-configs.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								experiments/eval/scripts/generate-strong-booster-configs.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | #!/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) | ||||||
							
								
								
									
										152
									
								
								experiments/eval/scripts/generate-weak-configs.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										152
									
								
								experiments/eval/scripts/generate-weak-configs.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,152 @@ | |||||||
|  | #!/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) | ||||||
							
								
								
									
										20
									
								
								experiments/eval/scripts/make-latex-table.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								experiments/eval/scripts/make-latex-table.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | #!/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,12 +44,13 @@ 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): | def load_array_mean_timings(jobid: str, excluded_array_indices): | ||||||
|     mts = [ |     mts = [] | ||||||
|         load_mean_timings(outdir_path) |     for outdir_path in get_outdirs(jobid): | ||||||
|         for outdir_path |         if any(str(outdir_path).endswith(str(i)) for i in excluded_array_indices): | ||||||
|         in get_outdirs(jobid) |             print(f"Not loading timings for {outdir_path} because it was excluded.", file=sys.stderr) | ||||||
|     ] |             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) | ||||||
| 
 | 
 | ||||||
| @ -75,18 +76,37 @@ 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": [array_job["steps"][-1] for array_job in accounting_data["jobs"]] |             "accounting": jobs | ||||||
|         }) |         }) | ||||||
|     print(json.dumps(results, indent=2 if args.prettify else None)) |     print(json.dumps(results, indent=2 if args.prettify else None)) | ||||||
|  | |||||||
							
								
								
									
										63
									
								
								experiments/eval/strong-booster.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								experiments/eval/strong-booster.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | { | ||||||
|  |   "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": "00:30:00" |       "time": "01:00:00" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "name": "strong-cpu-04-04-06", |       "name": "strong-cpu-04-04-06", | ||||||
|       "nodes": 2, |       "nodes": 2, | ||||||
|       "tasks": 96, |       "tasks": 96, | ||||||
|       "time": "00:30:00" |       "time": "01:00:00" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "name": "strong-cpu-04-04-12", |       "name": "strong-cpu-04-04-12", | ||||||
|       "nodes": 4, |       "nodes": 4, | ||||||
|       "tasks": 192, |       "tasks": 192, | ||||||
|       "time": "00:10:00" |       "time": "00:20:00" | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "name": "strong-cpu-04-08-12", |       "name": "strong-cpu-04-08-12", | ||||||
|  | |||||||
							
								
								
									
										263
									
								
								experiments/eval/templates/strong-booster.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								experiments/eval/templates/strong-booster.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,263 @@ | |||||||
|  | { | ||||||
|  |   "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": 5 |     "timesteps": 10 | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -253,7 +253,7 @@ | |||||||
|     "randomseed": 42, |     "randomseed": 42, | ||||||
|     "statusoutput": 1, |     "statusoutput": 1, | ||||||
|     "timestepguard": 1, |     "timestepguard": 1, | ||||||
|     "timesteps": 5, |     "timesteps": 10, | ||||||
|     "cuda": { |     "cuda": { | ||||||
|       "subblocks": { |       "subblocks": { | ||||||
|         "blockDim": [8, 8, 8] |         "blockDim": [8, 8, 8] | ||||||
|  | |||||||
							
								
								
									
										193
									
								
								experiments/eval/templates/weak.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								experiments/eval/templates/weak.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,193 @@ | |||||||
|  | { | ||||||
|  |   "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