@@ -285,18 +285,48 @@ class SOL_adim_ZF(SOL_adim):
285285 def __init__ (self , params ):
286286 super ().__init__ (params )
287287
288- # self.a_n = self.a_n.at[0, :].set(self.dens_dissip[0, :])
289- # self.b_n = self.sigma_nphi * np.ones_like(self.k2_2d)
290288 self .a_phi = self .a_phi .at [0 , :].set (- self .k2_2d [0 , :])
291- # self.b_n = self.b_n.at[0,:].set(0)
292289
290+ @register_pde ("SOL_adim_adapted_source" )
291+ class SOL_adim (PDE_structure ):
292+ def __init__ (self , params ):
293+ super ().__init__ (params )
294+ self .Ra = params .user ["pde" ]["Ra" ]
295+ self .Pr = params .user ["pde" ]["Pr" ]
296+ self .Sigma = params .user ["pde" ]["Sigma" ]
297+
298+ #TODO: reimplement gradn
299+ self .a_n = - self .k2_2d / self .Pr
300+ self .b_n = 0.
301+ self .a_phi = - self .k2_2d - self .inv_k2_2d * self .Sigma
302+ self .b_phi = self .inv_k2_2d * 1j * self .ky_2d * self .Ra / self .Pr
293303
294- # @register_pde("SOL_ZF")
295- # class SOL_ZF(SOL):
296- # def __init__(self, params):
297- # super().__init__(params)
304+ self .b_phi = self .b_phi .at [0 , :].set (0 )
305+
306+ # Source
307+ self .source = Source (params )
308+ self .source_dict = self .source .get_source ()
298309
299- # self.b_n = self.sigma_nphi * np.ones_like(self.k2_2d)
300- # self.a_n = self.a_n.at[0, :].set(self.dens_dissip[0, :])
301- # self.b_n = self.b_n.at[0,:].set(0)
302- # self.a_phi = self.a_phi.at[0, :].set(self.phi_dissip[0, :])
310+ @partial (jit , static_argnums = (0 ,))
311+ def compute_rhs (self , state , t = None ):
312+ # t could be removed
313+ potential_fft = state ["potential_fft" ]
314+ dens_fft = state ["density_fft" ]
315+
316+ Sn_fft = self .source_dict ["density_source_fft" ]
317+ Sphi_fft = self .source_dict ["potential_source_fft" ]
318+
319+ dens = np .real (np .fft .ifft2 (dens_fft ))
320+ vort = np .real (np .fft .ifft2 (- self .k2_2d * potential_fft ))
321+ vEx = - np .real (np .fft .ifft2 (1j * self .ky_2d * potential_fft ))
322+ vEy = np .real (np .fft .ifft2 (1j * self .kx_2d * potential_fft ))
323+
324+ nl_term_rhs_dens = - poisson_bracket (
325+ dens , vEx , vEy , 1j * self .kx_2d , 1j * self .ky_2d )
326+ nl_term_rhs_vort = - poisson_bracket (
327+ vort , vEx , vEy , 1j * self .kx_2d , 1j * self .ky_2d )
328+
329+ dens_fft_out = self .a_n * dens_fft + self .b_n * potential_fft + nl_term_rhs_dens + (Sn_fft / self .Pr )
330+ potential_fft_out = self .a_phi * potential_fft + self .b_phi * dens_fft + (nl_term_rhs_vort + Sphi_fft )* (- self .inv_k2_2d )
331+
332+ return {"density_fft" : dens_fft_out , "potential_fft" : potential_fft_out }
0 commit comments