diff --git a/code_gen/cgen.py b/code_gen/cgen.py index ce8e1f7be31f99725e769f35ab6b17202045a6b2..7aed0dc2bf76e6a0327d3e00f4dc38b3434b33fd 100644 --- a/code_gen/cgen.py +++ b/code_gen/cgen.py @@ -126,6 +126,7 @@ class CGen: "ASCII\n" \ "DATASET UNSTRUCTURED_GRID\n" + end = start + n filename_var = f"filename{id}" filehandle_var = f"vtk{id}" printer.print(f"char {filename_var}[128];") @@ -137,7 +138,7 @@ class CGen: # Write positions printer.print(f"fprintf({filehandle_var}, \"POINTS %d double\\n\", {n.generate()});") - CGen.generate_for_preamble("i", start, n.generate()) + CGen.generate_for_preamble("i", start.generate(), end.generate()) printer.add_ind(4) printer.print(f"fprintf({filehandle_var}, \"%.4f %.4f %.4f\\n\", position[i * 3], position[i * 3 + 1], position[i * 3 + 2]);") printer.add_ind(-4) @@ -146,16 +147,16 @@ class CGen: # Write cells printer.print(f"fprintf({filehandle_var}, \"CELLS %d %d\\n\", {n.generate()}, {n.generate()} * 2);") - CGen.generate_for_preamble("i", start, n.generate()) + CGen.generate_for_preamble("i", start.generate(), end.generate()) printer.add_ind(4) - printer.print(f"fprintf({filehandle_var}, \"1 %d\\n\", i);") + printer.print(f"fprintf({filehandle_var}, \"1 %d\\n\", i - {start.generate()});") printer.add_ind(-4) CGen.generate_for_epilogue() printer.print(f"fwrite(\"\\n\\n\", 1, 2, {filehandle_var});") # Write cell types printer.print(f"fprintf({filehandle_var}, \"CELL_TYPES %d\\n\", {n.generate()});") - CGen.generate_for_preamble("i", start, n.generate()) + CGen.generate_for_preamble("i", start.generate(), end.generate()) printer.add_ind(4) printer.print(f"fwrite(\"1\\n\", 1, 2, {filehandle_var});") printer.add_ind(-4) @@ -166,9 +167,10 @@ class CGen: printer.print(f"fprintf({filehandle_var}, \"POINT_DATA %d\\n\", {n.generate()});") printer.print(f"fprintf({filehandle_var}, \"SCALARS mass double\\n\");") printer.print(f"fprintf({filehandle_var}, \"LOOKUP_TABLE default\\n\");") - CGen.generate_for_preamble("i", start, n.generate()) + CGen.generate_for_preamble("i", start.generate(), end.generate()) printer.add_ind(4) - printer.print(f"fprintf({filehandle_var}, \"%4.f\\n\", mass[i]);") + #printer.print(f"fprintf({filehandle_var}, \"%4.f\\n\", mass[i]);") + printer.print(f"fprintf({filehandle_var}, \"1.0\\n\");") printer.add_ind(-4) CGen.generate_for_epilogue() printer.print(f"fwrite(\"\\n\\n\", 1, 2, {filehandle_var});") diff --git a/sim/pbc.py b/sim/pbc.py index 8bf51978fb41bdb68bc1ce12fd4bcfe6babca0c6..bdc709ef5ba5f46878eb347fbdf9ecc31bad0b52 100644 --- a/sim/pbc.py +++ b/sim/pbc.py @@ -95,11 +95,15 @@ class SetupPBC: if capacity_exceeded: resize.set(Select(sim, resize > npbc, resize + 1, npbc)) else: - pbc_map[npbc].set(i) pbc_mult[npbc][d].set(1) for is_local in Branch(sim, i < nlocal): # TODO: VecFilter.others generator? + if is_local: + pbc_map[npbc].set(i) + else: + pbc_map[npbc].set(pbc_map[i - nlocal]) + for d_ in [x for x in range(0, ndims) if x != d]: if is_local: pbc_mult[npbc][d_].set(0) @@ -113,10 +117,13 @@ class SetupPBC: if capacity_exceeded: resize.set(Select(sim, resize > npbc, resize + 1, npbc)) else: - pbc_map[npbc].set(i) pbc_mult[npbc][d].set(-1) - for is_local in Branch(sim, i < nlocal): + if is_local: + pbc_map[npbc].set(i) + else: + pbc_map[npbc].set(pbc_map[i - nlocal]) + for d_ in [x for x in range(0, ndims) if x != d]: if is_local: pbc_mult[npbc][d_].set(0) diff --git a/sim/vtk.py b/sim/vtk.py index d850c337c57470c58baf939f41de9f9fe2a8e088..53e4df733c4ebf9d7b1bc2f360185877724b6ca4 100644 --- a/sim/vtk.py +++ b/sim/vtk.py @@ -12,7 +12,14 @@ class VTKWrite: return [] def generate(self): - self.sim.code_gen.generate_vtk_writing(VTKWrite.vtk_id, self.filename, 0, self.sim.nlocal, self.timestep) + self.sim.code_gen.generate_vtk_writing( + VTKWrite.vtk_id * 2, f"{self.filename}_local", + as_lit_ast(self.sim, 0), self.sim.nlocal, self.timestep) + + self.sim.code_gen.generate_vtk_writing( + VTKWrite.vtk_id * 2 + 1, f"{self.filename}_pbc", + self.sim.nlocal, self.sim.pbc.npbc, self.timestep) + VTKWrite.vtk_id += 1 def transform(self, fn):