def test_scaling(self): # Make sure values are unscaled/dimensional. def custom_method(d_outputs, d_residuals, mode): if d_outputs['out_var'][0] != 12.0: raise ValueError('This value should be unscaled.') return False, 0, 0 class ScaledComp(ImplicitComponent): def setup(self): self.add_input('a', val=10., units='m') self.add_output('states', val=20.0, ref=3333.0) self.add_output('out_var', val=20.0, ref=12.0) p = Problem() p.model.add_subsystem('des_vars', IndepVarComp('a', val=10., units='m'), promotes=['*']) p.model.add_subsystem('icomp', ScaledComp(), promotes=['*']) model = p.model model.linear_solver = LinearUserDefined(custom_method) p.setup(mode='rev', check=False) p.run_model() jac = p.compute_totals(of=['out_var'], wrt=['a'], return_format='dict')
def setup(self): self.add_input('a', val=10., units='m') rank = self.comm.rank GLOBAL_SIZE = 15 sizes, offsets = evenly_distrib_idxs(self.comm.size, GLOBAL_SIZE) self.add_output('states', shape=int(sizes[rank])) self.add_output('out_var', shape=1) self.local_size = sizes[rank] self.linear_solver = PETScKrylov() self.linear_solver.precon = LinearUserDefined(self.mysolve)
def test_method_default(self): # Uses `solve_linear` by default p = Problem() p.model.add_subsystem('des_vars', IndepVarComp('a', val=10., units='m'), promotes=['*']) p.model.add_subsystem('icomp', DistribStateImplicit(), promotes=['*']) model = p.model model.linear_solver = PETScKrylov() model.linear_solver.precon = LinearRunOnce() p.setup(vector_class=PETScVector, mode='rev', check=False) model.icomp.linear_solver.precon = LinearUserDefined() p.run_model() jac = p.compute_totals(of=['out_var'], wrt=['a'], return_format='dict') assert_rel_error(self, 15.0, jac['out_var']['a'][0][0])