parameters['PC'] = 'bfgs' parameters['memory_limit'] = np.inf parameters['H0inv'] = 'Rinv' if versiondolfin.split('.')[0] == '2016' and amg == 'petsc_amg': parameters['avgPC'] = True else: parameters['avgPC'] = False MPI.barrier(mpicommbarrier) tstart = time.time() #TODO: nbPDEs not correct (needs to be multiplied by nb sources) waveobj.inversion(m0, mt, parameters, boundsLS=[[1e-6, 1.0], [1e-3, 1.0]], myplot=myplotf) tend = time.time() Dt = tend - tstart if PRINT: print 'Time to solve inverse problem {}'.format(Dt) minat = at.vector().min() maxat = at.vector().max() minbt = bt.vector().min() maxbt = bt.vector().max() minct = ct.vector().min() maxct = ct.vector().max() mina0 = a0.vector().min()
waveobj.dd = DD if mpirank == 0: np.save(outputdirectory + filename + str(freq) + '/dd.npy', np.array(DD)) waveobj.solvefwd_cost() if mpirank == 0: print 'noise misfit={}, regul cost={}, ratio={}'.format(waveobj.cost_misfit, \ waveobj.cost_reg, waveobj.cost_misfit/waveobj.cost_reg) if PLOT: plotindex = len(waveobj.solfwd) / 2 myplot.plot_timeseries(waveobj.solfwd[plotindex], 'pd', 0, skip, dl.Function(V)) # solve inverse problem if mpirank == 0: print 'Solve inverse problem' waveobj.inversion(b_target_fn, b_target_fn, mpicomm, myplot=myplot) if PLOT: myplot.set_varname('b_MAP') myplot.plot_vtk(waveobj.PDE.b) # Save MAP point fileout = dl.HDF5File(mpicomm, \ outputdirectory + filename + str(freq) + '/MAP.h5', 'w') fileout.write(waveobj.PDE.b, 'b') else: # Load MAP point fileout = dl.HDF5File(mpicomm, \ outputdirectory + filename + str(freq) + '/MAP.h5', 'r') binit = dl.Function(Vm) fileout.read(binit, 'b')