======================================================
There are only a couple of src files for the hybrid norm solver. Others are for test programs and comparsions.

norm_mod.f90                 //The module defines the different norm types, like l2,hybrid(hyperbolic), huber, etc.
plane_search_mod.f90     //This is the main src file for plane-search conjugate direction scheme.

solver_smp_nrm.f90   Hybrid norm solver without regularization
solver_reg_nrm.f90   Hybrid norm solver with regularization

======================================================
Three test application was tested. The main program srcfiles are KMig.f90 (Kirchfast inversion), Dixinv.f90(Dix inversion), Test_veltran.f90(Slowness scan inversion, smp solver without regularization). Please refer to these files for examples of invoking the solver.
Please see the src code of these files for reference.

The interface to invoke the regularized norm solver ( The smp norm solver has the similar interfaces except there is only one norm function on the residue)

call solver_reg_nrm(m=intervel, d=data, Fop=causint_lop, Aop=igrad1_lop,Wop=wt_dix, stepper=cgstep_ps, nAop=size$
                      &norm_dat_in=str_norm_dat, norm_mod_in=str_norm_mod, qnt_dat_in=qntd, qnt_mod_in=qntm,R_th_d_in,R_th_m_in &
                      &qt_period_in=qt_period, psiter=psiter, overshot_shrink_max_cnt_in=max_overshot_cnt)

!must set stepper to cgstep_ps

There are some extra params than the l2 solver we usually see.

norm_dat_in: the name of the name we want to apply on the Data residue
norm_mod_in: the name of the name we want to apply on the Model residue 

!!These two params needs to be defined as character(12) type. Currently the options you have are "l2","hybrid","huber"(Huber norm is not intensively tested yet), and these strings are case SENSITIVE!

qnt_dat_in: the quantile you set on data residue. e.g 0.95 means the solver will pick up the value at 95% percentil such that only 5% residues points is higher than that value
qnt_mod_in: the same as above, except it is applied on model residue
!!If you specify these values while using norm types that does not need this value (like l2), the program will ignore this param

R_th_d_in, R_th_m_in: Instead of specifying quantile, this is the arbitrary threshold value you want to specify on the dat/model residue.
If you specify this value, the program will take it as priority.

psiter: the maximum number of iterations you want the plane-search scheme (find alpha,beta) to perform within each outer loop.As in l2 case, you just need only 1. The solver will quit the plane-search if it finds that no more improvements can be made, it is safe to set this with a big value. However as we experimented, most cases this is not necessary, 5 is enough.

qt_period_in: This applies only when specified to use quantile value to find threshold. Since the residue vector is changing at every iteration, the solver will recalculate the threshold value at iter=1,2,2 + qt_period_in,2 + 2*qt_period_in... using the quantile you specified.

overshot_shrink_max_cnt_in: This value defines how many times the solver will try to half the alpha/beta value when it encounters the case of overshoot. If set to Zero, then the solver will quit plane-search immediately once it encounters overshoot. If overshoot happens in the first iteration in plane-search, then solver will get stuck because next time it enters plane search, it will begin with the same search directions as before. So it would be better to make this param > 0.
==============================================================

The solver will output the model vector for each iteration if an output param "mod_iter=filename.H" is present in the command line for the executable. e.g
< input.H executable.x  par=par.p mod_iter="model_as_iteraion.H" >output.H


==============================================================
!!Notice
We are not doing software engineering here. There are some error handling here, but definitely not completele. We are very glad if users can help us to test the robust of the plane-search method itself, but it is not wise to supply the solver unreasonable parameters to test the robustness of the program.(such as set R_th_d_in to a negative value).
Also this solver is still under development, there are most likely bugs in it( although I did not find up to now) that I did not  fix yet. The solver will output messages when running, so it might be a little bit verbose. If you find the unexpected error when using this solver, please save all the settings, so we can repeat the experiment later for diagnosis. Your bug report is highly appreciated.
