@@ -249,12 +249,70 @@ function main_transient_sf(distribute,parts)
249249 @test reduce (& ,map (≈ ,partition (A_t),partition (A_t_AD)))
250250end
251251
252+
253+
254+ function main_transient_mf (distribute,parts)
255+ ranks = distribute (LinearIndices ((prod (parts),)))
256+
257+ model = CartesianDiscreteModel (ranks,parts,(0 ,1 ,0 ,1 ),(4 ,4 ))
258+
259+ k = 2
260+ reffe_u = ReferenceFE (lagrangian,VectorValue{2 ,Float64},k)
261+ reffe_p = ReferenceFE (lagrangian,Float64,k- 1 ;space= :P )
262+
263+ u (x,t) = VectorValue (x[2 ],- x[1 ])
264+ u (t:: Real ) = x -> u (x,t)
265+ V = TestFESpace (model,reffe_u,dirichlet_tags= " boundary" )
266+ U = TransientTrialFESpace (V,u)
267+ Q = TestFESpace (model,reffe_p;conformity= :L2 ,constraint= :zeromean )
268+
269+ X = TransientMultiFieldFESpace ([U,Q])
270+ Y = MultiFieldFESpace ([V,Q])
271+
272+ Ω = Triangulation (model)
273+ dΩ = Measure (Ω,2 * (k+ 1 ))
274+
275+ ν = 1.0
276+ f = VectorValue (0.0 ,0.0 )
277+
278+ conv (u,∇u) = (∇u' )⋅ u
279+ dconv (du,∇du,u,∇u) = conv (u,∇du)+ conv (du,∇u)
280+ c (u,v) = ∫ (v⊙ (conv∘ (u,∇ (u))))dΩ
281+ dc (u,du,dv) = ∫ (dv⊙ (dconv∘ (du,∇ (du),u,∇ (u))))dΩ
282+
283+ mass (t, ∂ₜu, v) = ∫ (∂ₜu⋅ v)dΩ
284+ biform ((du,dp),(dv,dq)) = ∫ ( ν* ∇ (dv)⊙ ∇ (du) - (∇⋅ dv)* dp - (∇⋅ du)* dq)dΩ
285+ liform ((dv,dq)) = ∫ (dv⋅ f)dΩ
286+
287+ r (t,(u,p),(v,q)) = mass (t, ∂t (u), v) + biform ((u,p),(v,q)) + c (u,v) - liform ((v,q))
288+ j_0 (t,(u,p),(du,dp),(dv,dq)) = biform ((du,dp),(dv,dq)) + dc (u,du,dv)
289+ j_t (t,(u,p),(dut,dp),(dv,dq)) = mass (t, dut, dv)
290+
291+ op = TransientFEOperator (r,(j_0,j_t),X,Y)
292+ op_AD = TransientFEOperator (r,X,Y)
293+
294+ xh = interpolate ([VectorValue (1.0 ,1.0 ),1.0 ],X (0.0 ))
295+ ∂txh = interpolate ([VectorValue (0.0 ,0.0 ),0.0 ],X (0.0 ))
296+ xhₜ = TransientCellField (xh,(∂txh,))
297+
298+ b = assemble_vector (y-> r (1.0 ,xhₜ,y),Y)
299+ A_0 = assemble_matrix ((x,y)-> j_0 (1.0 ,xhₜ,x,y),X (1.0 ),Y)
300+ A_t = assemble_matrix ((x,y)-> j_t (1.0 ,xhₜ,x,y),X (1.0 ),Y)
301+ jac_0_AD = get_jacs (op_AD)[1 ]
302+ jac_t_AD = get_jacs (op_AD)[2 ]
303+ A_0_AD = assemble_matrix ((x,y)-> jac_0_AD (1.0 ,xhₜ,x,y),X (1.0 ),Y)
304+ A_t_AD = assemble_matrix ((x,y)-> jac_t_AD (1.0 ,xhₜ,x,y),X (1.0 ),Y)
305+ @test reduce (& ,map (≈ ,partition (A_0),partition (A_0_AD)))
306+ @test reduce (& ,map (≈ ,partition (A_t),partition (A_t_AD)))
307+ end
308+
252309function main (distribute,parts)
253- main_sf (distribute,parts)
254- main_mf (distribute,parts)
255- mf_different_fespace_trians (distribute,parts)
256- skeleton_mf_different_fespace_trians (distribute,parts)
257- main_transient_sf (distribute,parts)
310+ # main_sf(distribute,parts)
311+ # main_mf(distribute,parts)
312+ # mf_different_fespace_trians(distribute,parts)
313+ # skeleton_mf_different_fespace_trians(distribute,parts)
314+ # main_transient_sf(distribute,parts)
315+ main_transient_mf (distribute,parts)
258316end
259317
260318end
0 commit comments