[firedrake] Iteration space in local mass matrix assembly

Eike Mueller e.mueller at bath.ac.uk
Thu Nov 6 15:24:04 GMT 2014


Dear firedrakers,

when I store the local DG mass matrix in a PyOP2 dat of 3x3 matrices by hand, why do I need to specify the op2.i[0] iteration space as in here

V = FunctionSpace(mesh,'DG',1)
V_DG0 = FunctionSpace(mesh,'DG',0)

u = TestFunction(V)
v = TrialFunction(V)

mass = u*v*dx

mass_kernel = compile_form(mass, 'mass')[0][6]
mass_matrix = Function(V_DG0, val=op2.Dat(V_DG0.node_set**(3*3)))

op2.par_loop(mass_kernel,
             mass_matrix.cell_set,
             mass_matrix.dat(op2.INC, mass_matrix.cell_node_map()[op2.i[0]]),
             mesh.coordinates.dat(op2.READ,mesh.coordinates.cell_node_map(),flatten=True),
             mesh.coordinates.dat(op2.READ,mesh.coordinates.cell_node_map(),flatten=True))

When I print out mass_kernel.code I get 

static inline void mass_cell_integral_0_otherwise (double A[3][3] , double **vertex_coordinates , double **w0 ) { 
[…]
}

i.e. on each cell the kernel gets passed a 3x3 matrix (= array with 9 elements). If I leave out the "[op2.i[0]]” I only get zeros in mass_matrix.
Also, why do the coordinates have to be passed with flatten=True keyword?

Thanks a lot,

Eike


--

Dr Eike Hermann Mueller
Research Associate (PostDoc)

Department of Mathematical Sciences
University of Bath
Bath BA2 7AY, United Kingdom

+44 1225 38 5803
e.mueller at bath.ac.uk
http://people.bath.ac.uk/em459/

-------------- next part --------------
HTML attachment scrubbed and removed


More information about the firedrake mailing list