Elaboradar  0.1

◆ trovo_hvprmax()

int elaboradar::CalcoloVPR::trovo_hvprmax ( int *  hmax)

trova il massimo del profilo

funzione che trova la quota del massimo valore del profilo

trovo hvprmax a partire da 400 m sotto lo zero dell'adiabatica secca come massimo di almeno 5 dBZ più alto in quota

Parametri
[out]hmax- altezza massimo
Restituisce
0 se ok 1 se fallisce

Definizione alla linea 1100 del file cum_bac.cpp.

1101 {
1102  int i,imax,istart,foundlivmax;
1103  float h0start,peak,soglia;
1104 
1105 
1106  if (t_ground != NODATAVPR)
1107  {
1108  LOG_DEBUG("trovo hvprmax a partire da 400 m sotto lo zero dell'adiabatica secca");
1109  h0start=t_ground/9.8*1000 ;
1110  istart=h0start/TCK_VPR -2;
1111  if (istart< livmin/TCK_VPR) istart=livmin/TCK_VPR;
1112  LOG_DEBUG("t_ground h0start istart %f %f %i",t_ground,h0start,istart);
1113  }
1114  else {
1115  LOG_DEBUG("trovo hvprmax a partire da livmin");
1116  istart=livmin/TCK_VPR+1;
1117  }
1118 
1119 
1120  /* trovo hvprmax e il suo livello a partire dal livello istart */
1121 
1122  //--inizializzazione
1123  foundlivmax=0;
1124  peak=NODATAVPR;
1125  *hmax=INODATA;
1126  // Enrico vprmax=NODATAVPR;
1127  imax=INODATA;
1128  soglia = DBZ::DBZtoR(THR_VPR,200,1.6); // CAMBIATO, ERRORE, PRIMA ERA RtoDBZ!!!!VERIFICARE CHE IL NUMERO PARAMETRI FUNZIONE SIA CORRETTO
1129 
1130  //--se vpr al livello corrente e 4 layer sopra> soglia, calcolo picco
1131  LOG_DEBUG(" istart %d low %6.2f up %6.2f soglia %6.2f peak %6.2f imax %d", istart, vpr.val[istart] , vpr.val[istart+4], soglia, peak, imax);
1132  if (vpr.val[istart] >soglia && vpr.val[istart+4] > soglia){
1133  peak=10*log10(vpr.val[istart]/vpr.val[istart+4]);//inizializzo il picco
1134  LOG_DEBUG("peak1 = %f",peak);
1135  }
1136  //----se picco > MINIMO il punto è ok
1137  if(peak> MIN_PEAK_VPR){
1138  imax=istart;
1139  // Enrico vprmax=vpr.val[imax];
1140  LOG_DEBUG("il primo punto soddisfa le condizioni di picco");
1141  }
1142  for (i=istart+1;i<NMAXLAYER-4;i++) //la ricerca è un po' diversa dall'originale.. trovo il picco + alto con valore rispetto a 4 sopra > soglia
1143  {
1144  if (vpr.val[i] <soglia || vpr.val[i+4] < soglia) break;
1145  peak=10*log10(vpr.val[i]/vpr.val[i+4]);
1146  if (vpr.val[i]>vpr.val[i-1] && peak> MIN_PEAK_VPR ) // se vpr(i) maggiore del massimo e picco sufficientemente alto
1147  {
1148  imax=i;
1149  // Enrico vprmax=vpr.val[imax];
1150  }
1151  LOG_DEBUG(" low %6.2f up %6.2f soglia %6.2f peak %6.2f imax %d", vpr.val[i] , vpr.val[i+4], soglia, peak, imax);
1152  }
1153 
1154  if ( imax > INODATA ){
1155  foundlivmax=1;
1156  peak=10*log10(vpr.val[imax]/vpr.val[imax+4]);
1157  *hmax=imax*TCK_VPR+TCK_VPR/2;
1158  LOG_DEBUG("trovato ilaymax %i %i",*hmax,imax);
1159  LOG_DEBUG(" picco in dbR %f",peak);
1160  }
1161 
1162  LOG_DEBUG("exit status trovo_hvprmax %i",foundlivmax);
1163  return (foundlivmax);
1164 }
int livmin
quota livello minimo calcolato
Definition: cum_bac.h:243
radarelab::algo::VPR vpr
Informa se il pixel è convettivo.
Definition: cum_bac.h:236
float t_ground
2m temperature
Definition: cum_bac.h:233