else: adjoint_setup(model) model.initialise_function_spaces() if job == 2 or job == 5: target = True else: target = False plotter = sw_io.Adjoint_Plotter('results/adj_{}_'.format(job), True, True, target=target) if job == 2: if options.adjoint_test: phi_ic = sw_io.create_function_from_file('phi_ic_adj{}_latest.json'. format(job), model.phi_FS) else: phi_ic = project(Expression('1.0'), model.phi_FS) model.setup(phi_ic = phi_ic)#, h_ic=h_ic) model.solve(T = options.T) (q, h, phi, phi_d, x_N, u_N) = split(model.w[0]) # get model data phi_d_aim = sw_io.create_function_from_file('deposit_data.json', model.phi_d_FS) x_N_aim = sw_io.create_function_from_file('runout_data.json', model.var_N_FS) # plot(phi_d_aim, interactive=True) # form Functional integrals int_0_scale = Constant(1)
a += inner(test[i], trial[i])*dx L += inner(test[i], self.w_ic[i])*dx solve(a == L, self.w[0]) # copy to w[1] self.w[1] = project(self.w[0], self.W) model = Model() model.solve() # generate functional (q, h, phi, phi_d, x_N, u_N) = split(model.w[0]) # form Functional integrals # get model data phi_d_aim = sw_io.create_function_from_file('deposit_data.json', model.phi_d_FS) # form Functional integrals int_0_scale = Constant(1) int_0 = inner(phi_d-phi_d_aim, phi_d-phi_d_aim)*int_0_scale*dx int_0_scale.assign(1e-2/assemble(int_0)) J = Functional(int_0*dt[FINISH_TIME]) reduced_functional = ReducedFunctional(J, [InitialConditionParameter(model.phi_ic)]) bounds = [[0.5], [1.5]] m_opt = minimize(reduced_functional, method = "L-BFGS-B", options = {'maxiter': 5,