def test_constrain_with_unit(self, varunit, conunit): create = dict(value=3., unit=varunit, hasOld=True) name = 'MyVar' conval = PhysicalField(5, conunit) constraints = dict(top=conval, ) v = ModelVariable(name=name, create=create, constraints=constraints) domain = SedimentDBLDomain() v.set_domain(domain) try: varval = conval.inUnitsOf(varunit) except TypeError: # incompatible units varval = None if varval is None: with pytest.raises(TypeError): v.setup() else: v.setup() v.var.updateOld() assert v.var.faceValue[0] == conval
def test_constrain(self, constraints): # test that boundary conditions get applied create = dict(value=3.3, unit='mol/l') name = 'var' constraints = dict(constraints) v = ModelVariable(name=name, create=create, constraints=constraints) domain = SedimentDBLDomain() v.set_domain(domain) v.setup() assert v.var is not None assert v.var.name == v.name constraints_count = sum( [1 for c in constraints if c not in ('top', 'bottom')]) assert len(v.var.constraints) == constraints_count, 'Var constraints: {} does not match ' \ 'specified: {}'.format( (v.var.constraints), constraints ) if 'top' in constraints: numerix.array_equal(v.var[0], constraints['top']) if 'bottom' in constraints: numerix.array_equal(v.var[-1], constraints['bottom']) if 'dbl' in constraints: assert (v.var[:domain.idx_surface] == constraints['dbl']).all() if 'sediment' in constraints: assert ( v.var[domain.idx_surface:] == constraints['sediment']).all()
def test_create_var(self, value, unit, hasOld): # creation casts it into base units create = dict(value=value, unit=unit, hasOld=hasOld) name = 'myVar' v = ModelVariable(name=name, create=create) domain = SedimentDBLDomain() v.set_domain(domain) v.setup() assert v.var is domain[name] assert v.var.name == v.name assert v.var.shape == domain.mesh.shape assert (v.var() == PhysicalField(value, unit).inBaseUnits()).all()