/*
  To compile c function:
  example #0  LINUX 
  cc -c -fPIC call_ht_adj12.c
  ld -shared -o call_ht_adj12.so call_ht_adj12.o
  example #1 UNIX
  cc -c -KPIC call_ht_adj12.c 
  ld -shared -o call_ht_adj12.so call_ht_adj12.o
  example #2
  cc -I/usr/local/rsi/idl/external -c -O -32 -KPIC call_ht_adj12.c
  ld -shared -32 -o call_ht_adj12.so call_ht_adj12.o
*/

#include "call_ht_adj12.h"
#include "mft12.c"

int call_ht_adj12(argc, argv)
  int argc;
  void *argv[];
{
  int    *dyn_in_prm;
  float  *dyn_in_val, *dyn_in_val2, *CONVECT, *conv_crit, *pressure;
  int    *air_moist_prm;
  float  *air_moist_val;
  int    *sfc_moist_prm;
  float  *sfc_moist_val, *salinity;
  int    *ss_prm;
  float  *ss_val, *t_air; 
  int    *sst_prm;
  float  *t_skin, *ref_ht_wind, *ref_ht_tq;
  int    *astab; 
  float  *Qnet;
  int    *warn;
  int    mft_flag;
  float  *dom_phs_spd, *h_sig, *lhf, *q_star, *shf, *tau, *t_star,
         *u_star, *wave_age, *ww_stab, *z_over_L, *zo_m;
  int    *eqv_neut_prm;
  float  *z_wanted, *u_at_z, *t_at_z, *q_at_z;
  int    *flux_model, *z0_mom_prm, *z0_TQ_prm, *stable_prm;

  float  phi_u;
 
  dyn_in_prm     = (int *)   argv[0];
  dyn_in_val     = (float *) argv[1];
  dyn_in_val2    = (float *) argv[2]; 
  CONVECT        = (float *) argv[3];
  conv_crit      = (float *) argv[4]; 
  pressure       = (float *) argv[5];
  air_moist_prm  = (int *)   argv[6];
  air_moist_val  = (float *) argv[7]; 
  sfc_moist_prm  = (int *)   argv[8];
  sfc_moist_val  = (float *) argv[9];
  salinity       = (float *) argv[10];
  ss_prm         = (int *)   argv[11];
  ss_val         = (float *) argv[12];
  t_air          = (float *) argv[13];
  sst_prm        = (int *)   argv[14];
  t_skin         = (float *) argv[15];
  ref_ht_wind    = (float *) argv[16];
  ref_ht_tq      = (float *) argv[17];
  z_wanted       = (float *) argv[18];
  astab          = (int *)   argv[19]; 
  eqv_neut_prm   = (int *)   argv[20];
  Qnet           = (float *) argv[21];
  warn           = (int *)   argv[22];
  flux_model     = (int *)   argv[23];
  z0_mom_prm     = (int *)   argv[24];
  z0_TQ_prm      = (int *)   argv[25];
  stable_prm     = (int *)   argv[26];
  shf            = (float *) argv[27];  
  lhf            = (float *) argv[28]; 
  tau            = (float *) argv[29]; 
  u_star         = (float *) argv[30]; 
  t_star         = (float *) argv[31]; 
  q_star         = (float *) argv[32]; 
  z_over_L       = (float *) argv[33]; 
  wave_age       = (float *) argv[34]; 
  dom_phs_spd    = (float *) argv[35]; 
  h_sig          = (float *) argv[36]; 
  ww_stab        = (float *) argv[37];
  zo_m           = (float *) argv[38]; 
  u_at_z         = (float *) argv[39];
  t_at_z         = (float *) argv[40];
  q_at_z         = (float *) argv[41];

/* 
  printf( "argc = %i\n", argc ); 
  printf( "call_ht_adj03x2.c: %f %f %f %f %f %i %f %i %f %f %i %f %f %i %f %f %f %i %f %i %i %f\n", 
   *dyn_in_val, *dyn-in_val2,
   *CONVECT, *conv_crit, *pressure, *air_moist_prm, *air_moist_val, 
   *sfc_moist_prm, *sfc_moist_val, *salinity, *ss_prm, *ss_val, *t_air, 
   *sst_prm, *t_skin, *z_wind_ref, *z_temp_ref, *astab, *Qnet, *warn, *eqv_neut, *z_wanted); 
*/

  mft_flag = ht_adj_(*dyn_in_prm, *dyn_in_val, *dyn_in_val2, *CONVECT, *conv_crit,
     *pressure, *air_moist_prm, *air_moist_val, *sfc_moist_prm, *sfc_moist_val,
     *salinity, *ss_prm, *ss_val, *t_air, *sst_prm, *t_skin, *ref_ht_wind, *ref_ht_tq,
     *z_wanted, *astab, *eqv_neut_prm, *Qnet, *warn, *flux_model, *z0_mom_prm, 
     *z0_TQ_prm, *stable_prm, 
     shf, lhf, tau, u_star, t_star, q_star, z_over_L, wave_age, 
     dom_phs_spd, h_sig, ww_stab, zo_m, u_at_z, t_at_z, q_at_z );

/*
  printf( "call_ht_adj12.c: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n",
   *shf, *lhf, tau[0], tau[1], u_star[0], u_star[1], *t_star, *q_star, 
   *z_over_L, *wave_age, *dom_phs_spd, *h_sig, *ww_stab, *zo_m, *u_at_z,
   *t_at_z, *q_at_z, *flux_model );  

  printf( "call_ht_adj12.c %i\n", mft_flag );
*/

  return( mft_flag );
}