@@ -412,8 +412,9 @@ def apply_mapping(expression, element, domain):
412412 mesh = domain
413413 if domain is not None and mesh != domain :
414414 raise NotImplementedError ("Multiple domains not supported" )
415- if expression .ufl_shape != element .value_shape :
416- raise ValueError (f"Mismatching shapes, got { expression .ufl_shape } , expected { element .value_shape } " )
415+ pvs = element .pullback .physical_value_shape (element , mesh )
416+ if expression .ufl_shape != pvs :
417+ raise ValueError (f"Mismatching shapes, got { expression .ufl_shape } , expected { pvs } " )
417418 mapping = element .mapping ().lower ()
418419 if mapping == "identity" :
419420 rexpression = expression
@@ -451,7 +452,7 @@ def apply_mapping(expression, element, domain):
451452 sub_elem = element .sub_elements [0 ]
452453 shape = expression .ufl_shape
453454 flat = ufl .as_vector ([expression [i ] for i in numpy .ndindex (shape )])
454- vs = sub_elem .value_shape
455+ vs = sub_elem .pullback . physical_value_shape ( sub_elem , mesh )
455456 rvs = sub_elem .reference_value_shape
456457 seen = set ()
457458 rpieces = []
@@ -472,7 +473,7 @@ def apply_mapping(expression, element, domain):
472473 # And reshape
473474 rexpression = as_tensor (numpy .asarray (rpieces ).reshape (element .reference_value_shape ))
474475 else :
475- raise NotImplementedError (f"Don't know how to handle mapping type { mapping } for expression of rank { element .value_shape } " )
476+ raise NotImplementedError (f"Don't know how to handle mapping type { mapping } for expression of rank { ufl . FunctionSpace ( mesh , element ) .value_shape } " )
476477 if rexpression .ufl_shape != element .reference_value_shape :
477478 raise ValueError (f"Mismatching reference shapes, got { rexpression .ufl_shape } expected { element .reference_value_shape } " )
478479 return rexpression
0 commit comments