Blender  V3.3
ocean_intern.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #ifdef WITH_OCEANSIM
14 # include "BLI_threads.h"
15 # include "fftw3.h"
16 # define GRAVITY 9.81f
17 
18 typedef struct Ocean {
19  /* ********* input parameters to the sim ********* */
20  float _V;
21  float _l;
22  float _w;
23  float _A;
24  float _damp_reflections;
25  float _wind_alignment;
26  float _depth;
27 
28  float _wx;
29  float _wz;
30 
31  float _L;
32 
33  /* dimensions of computational grid */
34  int _M;
35  int _N;
36 
37  /* spatial size of computational grid */
38  float _Lx;
39  float _Lz;
40 
41  float normalize_factor; /* init w */
42  float time;
43 
44  short _do_disp_y;
45  short _do_normals;
46  short _do_spray;
47  short _do_chop;
48  short _do_jacobian;
49 
50  /* Which spectral model we are using. */
51  int _spectrum;
52 
53  /* JONSWAP common parameters. */
54  float _fetch_jonswap;
55  float _sharpen_peak_jonswap;
56 
57  /* mutex for threaded texture access */
58  ThreadRWMutex oceanmutex;
59 
60  /* ********* sim data arrays ********* */
61 
62  /* two dimensional arrays of complex */
63  fftw_complex *_fft_in; /* init w sim w */
64  fftw_complex *_fft_in_x; /* init w sim w */
65  fftw_complex *_fft_in_z; /* init w sim w */
66  fftw_complex *_fft_in_jxx; /* init w sim w */
67  fftw_complex *_fft_in_jzz; /* init w sim w */
68  fftw_complex *_fft_in_jxz; /* init w sim w */
69  fftw_complex *_fft_in_nx; /* init w sim w */
70  fftw_complex *_fft_in_nz; /* init w sim w */
71  fftw_complex *_htilda; /* init w sim w (only once) */
72 
73  /* fftw "plans" */
74  fftw_plan _disp_y_plan; /* init w sim r */
75  fftw_plan _disp_x_plan; /* init w sim r */
76  fftw_plan _disp_z_plan; /* init w sim r */
77  fftw_plan _N_x_plan; /* init w sim r */
78  fftw_plan _N_z_plan; /* init w sim r */
79  fftw_plan _Jxx_plan; /* init w sim r */
80  fftw_plan _Jxz_plan; /* init w sim r */
81  fftw_plan _Jzz_plan; /* init w sim r */
82 
83  /* two dimensional arrays of float */
84  double *_disp_y; /* init w sim w via plan? */
85  double *_N_x; /* init w sim w via plan? */
86  /* all member of this array has same values,
87  * so convert this array to a float to reduce memory usage (MEM01). */
88  // float * _N_y;
89  double _N_y; /* sim w ********* can be rearranged? */
90  double *_N_z; /* init w sim w via plan? */
91  double *_disp_x; /* init w sim w via plan? */
92  double *_disp_z; /* init w sim w via plan? */
93 
94  /* two dimensional arrays of float */
95  /* Jacobian and minimum eigenvalue */
96  double *_Jxx; /* init w sim w */
97  double *_Jzz; /* init w sim w */
98  double *_Jxz; /* init w sim w */
99 
100  /* one dimensional float array */
101  float *_kx; /* init w sim r */
102  float *_kz; /* init w sim r */
103 
104  /* two dimensional complex array */
105  fftw_complex *_h0; /* init w sim r */
106  fftw_complex *_h0_minus; /* init w sim r */
107 
108  /* two dimensional float array */
109  float *_k; /* init w sim r */
110 } Ocean;
111 #else
112 /* stub */
113 typedef struct Ocean {
114  /* need some data here, C does not allow empty struct */
115  int stub;
117 #endif
118 
119 #ifdef __cplusplus
120 }
121 #endif
pthread_rwlock_t ThreadRWMutex
Definition: BLI_threads.h:125
double time
struct Ocean Ocean
int stub
Definition: ocean_intern.h:115