def test_DLLM_wrapper_json_valid_grad(self):
      DLLMWrap = DLLMWrapper('test', verbose=0)
      DLLMWrap.config_from_file('conf_file.json')
      DLLMWrap.set_out_format('numpy')
      DLLMWrap.set_grad_format('numpy')
 
      x0=DLLMWrap.get_x0()
       
      DLLMWrap.analysis()
       
      Ref_list=DLLMWrap.get_F_list()
       
      def f(x):
          DLLMWrap.run(x)
          func=DLLMWrap.get_F_list()
          return func/Ref_list
         
      def df(x):
          DLLMWrap.run_grad(x)
          func_grad=np.array(DLLMWrap.get_F_list_grad())
          N = func_grad.shape[0]
          ndv = func_grad.shape[1]
          out_grad = np.zeros((N,ndv))
          for i in xrange(N):
              out_grad[i,:] = func_grad[i,:]/Ref_list[i]
          return out_grad
     
      val_grad=FDValidGrad(2,f,df,fd_step=1.e-8)
      ok,df_fd,df=val_grad.compare(x0,treshold=1.e-5,split_out=True,return_all=True)
      assert(ok)
# Operating condition configuration
config_dict['cond1.OC.Mach']=0.8
config_dict['cond1.OC.AoA']=3.5
config_dict['cond1.OC.altitude']=10000.

# Parameterisation configuration
config_dict['cond1.param.geom_type']='Broken'
config_dict['cond1.param.n_sect']=20
config_dict['cond1.param.BCfilename']='input_parameters.par'
config_dict['cond1.param.airfoil.type']='simple'
config_dict['cond1.param.airfoil.AoA0']=-2.
config_dict['cond1.param.airfoil.Cm0']=-0.1

# DLLM configuration
config_dict['cond1.DLLM.type']='Solver'
config_dict['cond1.DLLM.method']='inhouse'
config_dict['cond1.DLLM.relax_factor']=0.99
config_dict['cond1.DLLM.stop_residual']=1e-9
config_dict['cond1.DLLM.max_iterations']=100
config_dict['cond1.DLLM.gamma_file_name']='gamma.dat'
#config_dict['cond1.DLLM.F_list_names']=['Lift','Drag','Drag_Pressure','Drag_Friction','Cl', 'Cd', 'Cdp', 'Cdf', 'LoD']
config_dict['cond1.DLLM.F_list_names']=['Lift','Drag','Drag_Pressure','Drag_Friction','LoD']
#config_dict['cond1.DLLM.target_Cl']=0.5
#config_dict['cond1.DLLM.target_Lift']=769200.

DLLMcond1=DLLMWrapper('cond1')
DLLMcond1.config_from_file('conf_file.json')
DLLMcond1.analysis_and_grad()