fixed field_to_field
This commit is contained in:
parent
5ec799c46f
commit
bc62e63e14
1 changed files with 31 additions and 10 deletions
|
@ -1,5 +1,5 @@
|
||||||
from pysbmy.density import mesh_to_mesh
|
from pysbmy.density import mesh_to_mesh
|
||||||
from pysbmy.Field import Field, read_field
|
from pysbmy.field import Field, read_field
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
@ -8,23 +8,43 @@ def field_to_field(
|
||||||
input_file:str,
|
input_file:str,
|
||||||
output_file:str,
|
output_file:str,
|
||||||
output_size:int|tuple[int,int,int]|list[int],
|
output_size:int|tuple[int,int,int]|list[int],
|
||||||
|
output_L:float|tuple[float,float,float]|list[float],
|
||||||
output_dpm:float|tuple[float,float,float]|list[float],
|
output_dpm:float|tuple[float,float,float]|list[float],
|
||||||
output_corner:tuple[float,float,float]|list[float],
|
output_corner:tuple[float,float,float]|list[float],
|
||||||
boundary_conditions:int,
|
boundary_conditions:int,
|
||||||
):
|
):
|
||||||
|
|
||||||
|
|
||||||
|
### Make sure all inputs are valid
|
||||||
|
if output_L is not None and output_dpm is not None:
|
||||||
|
raise ValueError("Either output_L or output_dpm can be specified, not both.")
|
||||||
|
|
||||||
if isinstance(output_size, int):
|
if isinstance(output_size, int):
|
||||||
output_size = (output_size, output_size, output_size) # N0, N1, N2
|
output_size = (output_size, output_size, output_size) # N0, N1, N2
|
||||||
|
elif len(output_size) == 1:
|
||||||
|
output_size = (output_size[0], output_size[0], output_size[0])
|
||||||
|
|
||||||
if isinstance(output_dpm, float):
|
if output_L is not None:
|
||||||
|
if isinstance(output_L, float):
|
||||||
|
output_L = (output_L, output_L, output_L)
|
||||||
|
elif len(output_L) == 1:
|
||||||
|
output_L = (output_L[0], output_L[0], output_L[0])
|
||||||
|
|
||||||
|
if output_dpm is None:
|
||||||
|
if output_L is None:
|
||||||
|
output_dpm = (-1, -1, -1)
|
||||||
|
else:
|
||||||
|
output_dpm = (output_L[0] / output_size[0], output_L[1] / output_size[1], output_L[2] / output_size[2])
|
||||||
|
elif isinstance(output_dpm, float):
|
||||||
output_dpm = (output_dpm, output_dpm, output_dpm) # d0, d1, d2
|
output_dpm = (output_dpm, output_dpm, output_dpm) # d0, d1, d2
|
||||||
elif output_dpm is None:
|
elif len(output_dpm) == 1:
|
||||||
output_dpm = (-1, -1, -1)
|
output_dpm = (output_dpm[0], output_dpm[0], output_dpm[0])
|
||||||
|
|
||||||
if not os.path.exists(input_file):
|
if not os.path.exists(input_file):
|
||||||
raise FileNotFoundError(f"Input file {input_file} does not exist.")
|
raise FileNotFoundError(f"Input file {input_file} does not exist.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Read the input field
|
# Read the input field
|
||||||
print(f"Reading input field from {input_file}")
|
print(f"Reading input field from {input_file}")
|
||||||
input_field = read_field(input_file)
|
input_field = read_field(input_file)
|
||||||
|
@ -59,9 +79,9 @@ def field_to_field(
|
||||||
print(f"Output field size: {output_size[0]} x {output_size[1]} x {output_size[2]}")
|
print(f"Output field size: {output_size[0]} x {output_size[1]} x {output_size[2]}")
|
||||||
print(f"Input field dpm: {d0_in:.3f} x {d1_in:.3f} x {d2_in:.3f}")
|
print(f"Input field dpm: {d0_in:.3f} x {d1_in:.3f} x {d2_in:.3f}")
|
||||||
print(f"Output field dpm: {d0_out:.3f} x {d1_out:.3f} x {d2_out:.3f}")
|
print(f"Output field dpm: {d0_out:.3f} x {d1_out:.3f} x {d2_out:.3f}")
|
||||||
print(f"Input field corner: {corner0:.1f} x {corner1:.1f} x {corner2:.1f}")
|
print(f"Input field corner: ({corner0:.1f}, {corner1:.1f}, {corner2:.1f})")
|
||||||
print(f"Output field corner: {output_corner[0]:.1f} x {output_corner[1]:.1f} x {output_corner[2]:.1f}")
|
print(f"Output field corner: ({output_corner[0]:.1f}, {output_corner[1]:.1f}, {output_corner[2]:.1f})")
|
||||||
print(f"Boundary conditions: {boundary_conditions}")
|
print(f"Boundary conditions: {'periodic' if boundary_conditions == 1 else 'non-periodic'}")
|
||||||
print("-----------------------------------------")
|
print("-----------------------------------------")
|
||||||
|
|
||||||
input_grid = input_field.data
|
input_grid = input_field.data
|
||||||
|
@ -101,10 +121,11 @@ if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description="Convert a field from one size to another.")
|
parser = argparse.ArgumentParser(description="Convert a field from one size to another.")
|
||||||
parser.add_argument("-i","--input_file", type=str, help="Input field file")
|
parser.add_argument("-i","--input_file", type=str, help="Input field file")
|
||||||
parser.add_argument("-o","--output_file", type=str, help="Output field file")
|
parser.add_argument("-o","--output_file", type=str, help="Output field file")
|
||||||
parser.add_argument("-N","--output_size", type=int, nargs=3, help="Output field size (N0, N1, N2)")
|
parser.add_argument("-N","--output_size", type=int, nargs="+", help="Output field size (N0, N1, N2)")
|
||||||
parser.add_argument("-dpm","--output_dpm", type=float, nargs=3, default=None, help="Output field dpm (d0, d1, d2)")
|
parser.add_argument("-L","--output_L", type=float, nargs="+", default=None, help="Output field size (L0, L1, L2)")
|
||||||
|
parser.add_argument("-dpm","--output_dpm", type=float, nargs="+", default=None, help="Output field dpm (d0, d1, d2)")
|
||||||
parser.add_argument("-corner","--output_corner", type=float, nargs=3, default=(0.,0.,0.), help="Output field corner (corner0, corner1, corner2)")
|
parser.add_argument("-corner","--output_corner", type=float, nargs=3, default=(0.,0.,0.), help="Output field corner (corner0, corner1, corner2)")
|
||||||
parser.add_argument("-BC","--boundary_conditions", type=int, default=1, help="Boundary conditions (0: periodic, 1: non-periodic)")
|
parser.add_argument("-BC","--boundary_conditions", type=int, default=1, help="Boundary conditions (0: periodic, 1: non-periodic)")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
field_to_field(args.input_file, args.output_file, args.output_size, args.output_dpm, args.output_corner, args.boundary_conditions)
|
field_to_field(args.input_file, args.output_file, args.output_size, args.output_L, args.output_dpm, args.output_corner, args.boundary_conditions)
|
Loading…
Add table
Add a link
Reference in a new issue