Пример #1
0
    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()
Пример #2
0
    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')