5. field
torchfsm.field.diffused_noise
¤
diffused_noise(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
diffusion_coef: float = 0.01,
device: Optional[device] = None,
dtype: Optional[dtype] = None,
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
) -> SpatialTensor["B C H ..."]
Generate a diffused noise field. The noise is generated by integrating a Laplacian operator with a random initial condition. The diffusion coefficient controls the amount of diffusion applied to the noise.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh to generate the noise on. If a sequence is provided, it should be in the form of [(x_min, x_max, n_points), ...]. |
required |
diffusion_coef
|
float
|
The diffusion coefficient. Default is 1.0. |
0.01
|
device
|
Optional[device]
|
The device to generate the noise on. Default is None. |
None
|
dtype
|
Optional[dtype]
|
The data type of the generated noise. Default is None. |
None
|
batch_size
|
int
|
The number of batches. Default is 1. |
1
|
n_channel
|
int
|
The number of channels. Default is 1. |
1
|
normalize_mode
|
Optional[Union[Literal['normal_distribution', '-1_1', '0_1'], Tuple[Union[float, Tuple[float, float]], Union[float, Tuple[float, float]]]]]
|
The normalization mode for the generated noise. See |
None
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ...]: The generated diffused noise field. |
Source code in torchfsm/field/_diffused_noise.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
torchfsm.field.random_diffused_noise
¤
random_diffused_noise(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
min_diffusion_coef: float = 0.001,
max_diffusion_coef: float = 0.01,
device: Optional[device] = None,
dtype: Optional[dtype] = None,
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
) -> SpatialTensor["B C H ..."]
Source code in torchfsm/field/_diffused_noise.py
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | |
torchfsm.field.kolm_force
¤
kolm_force(
x: Tensor,
drag_coef: float = -0.1,
k: float = 4.0,
length_scale: float = 1.0,
) -> Operator
Generate cosine force field for 2d kolmogorov flow in vorticity form. It is defined as \(a \omega - k cos (k l x)\)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
Tensor
|
The input tensor. |
required |
drag_coef
|
float
|
The drag coefficient \(a\). Default is -0.1. |
-0.1
|
k
|
float
|
The wave number. Default is 4.0. |
4.0
|
length_scale
|
float
|
The length scale \(l\). Default is 1.0. |
1.0
|
Source code in torchfsm/field/_kolm_force.py
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
torchfsm.field.wave_1d
¤
wave_1d(
x: SpatialTensor["B C H ..."],
min_k: int = 1,
max_k: int = 5,
min_amplitude: float = 0.5,
max_amplitude: float = 1.0,
n_polynomial: int = 5,
zero_mean: bool = False,
mean_shift_coef=0.3,
batched: bool = False,
) -> SpatialTensor["B C H ..."]
Generate a 1D wave field with multiple harmonics.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
SpatialTensor['B C H ...']
|
The input tensor. |
required |
min_k
|
int
|
The minimum wave number. Default is 1. |
1
|
max_k
|
int
|
The maximum wave number. Default is 5. |
5
|
min_amplitude
|
float
|
The minimum amplitude. Default is 0.5. |
0.5
|
max_amplitude
|
float
|
The maximum amplitude. Default is 1.0. |
1.0
|
n_polynomial
|
int
|
The number of polynomial terms. Default is 5. |
5
|
zero_mean
|
bool
|
If True, the mean of the wave will be zero. Default is False. |
False
|
mean_shift_coef
|
float
|
The coefficient for mean shift. Default is 0.3. |
0.3
|
batched
|
bool
|
If True, the input tensor is batched. Default is False. |
False
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated wave field. |
Source code in torchfsm/field/_wave_1d.py
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | |
torchfsm.field.random_gaussian_blobs
¤
random_gaussian_blobs(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
position_range: Tuple[float, float] = (0.4, 0.6),
variance_range: Tuple[float, float] = (0.005, 0.01),
batch_size: int = 1,
n_channel: int = 1,
device: Optional[device] = None,
) -> SpatialTensor["B C H ..."]
Generate random Gaussian blobs on the specified mesh.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh on which to generate the Gaussian blob. |
required |
position_range
|
Tuple[float, float]
|
The range of positions for the Gaussian blob. Default is (0.4, 0.6). |
(0.4, 0.6)
|
variance_range
|
Tuple[float, float]
|
The range of variances for the Gaussian blob. Default is (0.005, 0.01). |
(0.005, 0.01)
|
batch_size
|
int
|
The number of batches. Default is 1. |
1
|
n_channel
|
int
|
The number of channels. Default is 1. |
1
|
device
|
Optional[device]
|
The device on which to create the tensor. Default is None. |
None
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated Gaussian blob field. |
Source code in torchfsm/field/_gaussian_blobs.py
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | |
torchfsm.field.truncated_fourier_series
¤
truncated_fourier_series(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
freq_threshold: int = 5,
device: Optional[device] = None,
dtype: Optional[dtype] = None,
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
normalized_freq: bool = True,
noise_type: Literal["normal", "uniform"] = "normal",
) -> SpatialTensor["B C H ..."]
Generate a truncated Fourier series noise field on a given mesh.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh on which to generate the noise. |
required |
freq_threshold
|
int
|
The frequency threshold for truncation. |
5
|
device
|
Optional[device]
|
The device on which to create the tensor. |
None
|
dtype
|
Optional[dtype]
|
The data type of the tensor. |
None
|
batch_size
|
int
|
The number of batches. |
1
|
n_channel
|
int
|
The number of channels. |
1
|
normalize_mode
|
Optional[Union[Literal['normal_distribution', '-1_1', '0_1'], Tuple[Union[float, Tuple[float, float]], Union[float, Tuple[float, float]]]]]
|
The normalization mode for the generated noise. See |
None
|
normalized_freq
|
bool
|
If True, wheather to set the frequency threshold as a normalized value. If the domain length is 1, setting this to True or False will not make a difference. |
True
|
noise_type
|
Literal['normal', 'uniform']
|
The type of noise to generate in the Fourier domain. |
'normal'
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated noise field. |
Source code in torchfsm/field/_truncated_fourier.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | |
torchfsm.field.random_truncated_fourier_series
¤
random_truncated_fourier_series(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
min_freq: int = 2,
max_freq: int = 5,
device: Optional[device] = None,
dtype: Optional[dtype] = None,
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
normalized_freq: bool = True,
noise_type: Literal["normal", "uniform"] = "normal",
) -> SpatialTensor["B C H ..."]
Generate a truncated Fourier series noise field on a given mesh.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh on which to generate the noise. |
required |
min_freq
|
int
|
The minimum frequency threshold for truncation. |
2
|
max_freq
|
int
|
The maximum frequency threshold for truncation. |
5
|
device
|
Optional[device]
|
The device on which to create the tensor. |
None
|
dtype
|
Optional[dtype]
|
The data type of the tensor. |
None
|
batch_size
|
int
|
The number of batches. |
1
|
n_channel
|
int
|
The number of channels. |
1
|
normalize_mode
|
Optional[Union[Literal['normal_distribution', '-1_1', '0_1'], Tuple[Union[float, Tuple[float, float]], Union[float, Tuple[float, float]]]]]
|
The normalization mode for the generated noise. See |
None
|
normalized_freq
|
bool
|
If True, wheather to set the frequency threshold as a normalized value. If the domain length is 1, setting this to True or False will not make a difference. |
True
|
noise_type
|
Literal['normal', 'uniform']
|
The type of noise to generate in the Fourier domain. |
'normal'
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated noise field. |
Source code in torchfsm/field/_truncated_fourier.py
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | |
torchfsm.field.truncated_fourier_series_custom_filter
¤
truncated_fourier_series_custom_filter(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
low_pass_filter: SpatialTensor["B C H ..."],
device: Optional[device] = None,
dtype: Optional[dtype] = None,
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
noise_type: Literal["normal", "uniform"] = "normal",
) -> SpatialTensor["B C H ..."]
Generate a truncated Fourier series noise field on a given mesh.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh on which to generate the noise. |
required |
low_pass_filter
|
SpatialTensor['B C H ...']
|
The custom low-pass filter to apply to the Fourier noise. |
required |
device
|
Optional[device]
|
The device on which to create the tensor. |
None
|
dtype
|
Optional[dtype]
|
The data type of the tensor. |
None
|
batch_size
|
int
|
The number of batches. |
1
|
n_channel
|
int
|
The number of channels. |
1
|
normalize_mode
|
Optional[Union[Literal['normal_distribution', '-1_1', '0_1'], Tuple[Union[float, Tuple[float, float]], Union[float, Tuple[float, float]]]]]
|
The normalization mode for the generated noise. See |
None
|
noise_type
|
Literal['normal', 'uniform']
|
The type of noise to generate in the Fourier domain. |
'normal'
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated noise field. |
Source code in torchfsm/field/_truncated_fourier.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | |
torchfsm.field.functional_energy_spectrum
¤
functional_energy_spectrum(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
spectrum_func: Callable[[Tensor], Tensor],
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
) -> SpatialTensor["B C H ..."]
Generate an field \(\mathbf{u}\) based on a given energy spectrum function \(E(k)\) which statisfies$rac{1}{2}\oiint_{A(K)}\hat{\mathbf{u}}(\mathbf{k})\hat{\mathbf{u}}^*(\mathbf{k})dA(k)=E(k)$
where \(\hat{\mathbf{u}}\) is the Fourier transform of \(\mathbf{u}\) and \(\mathbf{u}^*\) is the corresponding complex conjugate.
How it works:
If \(\hat{\mathbf{u}}\) is independent of the direction of \(\mathbf{k}\), i.e., \(\hat{\mathbf{u}}(\mathbf{k})=\hat{\mathbf{u}}(k)\), then the above equation can be simplified as$rac{4\pi k^2}{2}|\hat{\mathbf{u}}(k)|^2=E(k)$.
Therefore, we can derive that \(|\hat{\mathbf{u}}(k)|=\sqrt{rac{E(k)}{2\pi k^2}}\).
You can use torchfsm.utils.collect_energy_spectrum to verify the energy spectrum of the generated field.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh or grid on which to generate the initial field. |
required |
spectrum_func
|
Callable[[Tensor], Tensor]
|
A function that takes a tensor of wave numbers (SpatialTensor["B C H ..."]) and returns the corresponding energy spectrum values, e.g., lambda k: 0.327k*(-5/3). |
required |
batch_size
|
int
|
The number of batches. Default is 1. |
1
|
n_channel
|
int
|
The number of channels. Note that if multiple channels are used, each channel will be treated as a component of the vector field ans the energy is equally distributed among all channels. Default is 1. |
1
|
normalize_mode
|
Optional[Union[Literal['normal_distribution', '-1_1', '0_1'], Tuple[Union[float, Tuple[float, float]], Union[float, Tuple[float, float]]]]]
|
The normalization mode for the generated noise. See |
None
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated initial field with shape (batch_size, n_channel, H, W, D, ...). The device and dtype are inherited from the input mesh. |
Source code in torchfsm/field/_energy_spectrum.py
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | |
torchfsm.field.random_power_law_energy_spectrum
¤
random_power_law_energy_spectrum(
mesh: Union[
Sequence[tuple[float, float, int]],
MeshGrid,
FourierMesh,
],
min_power: float = -5.0,
max_power: float = -2.0,
batch_size: int = 1,
n_channel: int = 1,
normalize_mode: Optional[
Union[
Literal["normal_distribution", "-1_1", "0_1"],
Tuple[
Union[float, Tuple[float, float]],
Union[float, Tuple[float, float]],
],
]
] = None,
) -> SpatialTensor["B C H ..."]
Generate a random field with a power-law energy spectrum on a given mesh, i.e., \(E(k)=k^p\)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mesh
|
Union[Sequence[tuple[float, float, int]], MeshGrid, FourierMesh]
|
The mesh or grid on which to generate the initial field. |
required |
min_power
|
float
|
The minimum power-law exponent. |
-5.0
|
max_power
|
float
|
The maximum power-law exponent. |
-2.0
|
batch_size
|
int
|
The number of batches. Default is 1. |
1
|
n_channel
|
int
|
The number of channels. Default is 1. |
1
|
normalize_mode
|
Optional[Union[Literal['normal_distribution', '-1_1', '0_1'], Tuple[Union[float, Tuple[float, float]], Union[float, Tuple[float, float]]]]]
|
The normalization mode for the generated noise. See |
None
|
Returns:
| Type | Description |
|---|---|
SpatialTensor['B C H ...']
|
SpatialTensor["B C H ..."]: The generated initial field with shape (batch_size, n_channel, H, W, D, ...). The device and dtype are inherited from the input mesh. |
Source code in torchfsm/field/_energy_spectrum.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | |
torchfsm.field.random_hermitian_field
¤
random_hermitian_field(
magnitude: SpatialTensor["B C H ..."],
)
Generate a random Hermitian field in Fourier space with a given magnitude.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
magnitude
|
SpatialTensor['B C H ...']
|
The desired magnitude of the Fourier field |
required |
Returns:
| Type | Description |
|---|---|
|
SpatialTensor["B C H ..."]: A random Hermitian field in Fourier space with the specified magnitude. |
Source code in torchfsm/field/_energy_spectrum.py
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |