def gradient(pb,region,scalar,optorder=1):
from sfepy_scb.projections import project_by_component
import numpy as nm
gfield = Field.from_args('gfield', nm.float64, 2, region,
approx_order=optorder - 1)
gradient = FieldVariable('gradient', 'parameter', dfield,
primary_var_name='(set-to-None)')
cfield = Field.from_args('component', nm.float64, 1, region,
approx_order=optorder - 1)
component = FieldVariable('component', 'parameter', cfield,
primary_var_name='(set-to-None)')
ev = pb.evaluate
order = 2 * (optorder - 1)
gradient_qp=ev(theterm, mode='qp')
gradient_qp=nm.swapaxes(gradient_qp,2,3) #make the row vectors into columns
project_by_component(gradient, gradient_qp, component, order)
return gradient