Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
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 1019 del file cum_bac.cpp.

1020 {
1021  int i,imax,istart,foundlivmax;
1022  float h0start,peak,soglia;
1023 
1024 
1025  if (t_ground != NODATAVPR)
1026  {
1027  LOG_DEBUG("trovo hvprmax a partire da 400 m sotto lo zero dell'adiabatica secca");
1028  h0start=t_ground/9.8*1000 ;
1029  istart=h0start/TCK_VPR -2;
1030  if (istart< livmin/TCK_VPR) istart=livmin/TCK_VPR;
1031  LOG_DEBUG("t_ground h0start istart %f %f %i",t_ground,h0start,istart);
1032  }
1033  else {
1034  LOG_DEBUG("trovo hvprmax a partire da livmin");
1035  istart=livmin/TCK_VPR+1;
1036  }
1037 
1038 
1039  /* trovo hvprmax e il suo livello a partire dal livello istart */
1040 
1041  //--inizializzazione
1042  foundlivmax=0;
1043  peak=NODATAVPR;
1044  *hmax=INODATA;
1045  // Enrico vprmax=NODATAVPR;
1046  imax=INODATA;
1047  soglia = DBZ::DBZtoR(THR_VPR,200,1.6); // CAMBIATO, ERRORE, PRIMA ERA RtoDBZ!!!!VERIFICARE CHE IL NUMERO PARAMETRI FUNZIONE SIA CORRETTO
1048 
1049  //--se vpr al livello corrente e 4 layer sopra> soglia, calcolo picco
1050  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);
1051  if (vpr.val[istart] >soglia && vpr.val[istart+4] > soglia){
1052  peak=10*log10(vpr.val[istart]/vpr.val[istart+4]);//inizializzo il picco
1053  LOG_DEBUG("peak1 = %f",peak);
1054  }
1055  //----se picco > MINIMO il punto è ok
1056  if(peak> MIN_PEAK_VPR){
1057  imax=istart;
1058  // Enrico vprmax=vpr.val[imax];
1059  LOG_DEBUG("il primo punto soddisfa le condizioni di picco");
1060  }
1061  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
1062  {
1063  if (vpr.val[i] <soglia || vpr.val[i+4] < soglia) break;
1064  peak=10*log10(vpr.val[i]/vpr.val[i+4]);
1065  if (vpr.val[i]>vpr.val[i-1] && peak> MIN_PEAK_VPR ) // se vpr(i) maggiore del massimo e picco sufficientemente alto
1066  {
1067  imax=i;
1068  // Enrico vprmax=vpr.val[imax];
1069  }
1070  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);
1071  }
1072 
1073  if ( imax > INODATA ){
1074  foundlivmax=1;
1075  peak=10*log10(vpr.val[imax]/vpr.val[imax+4]);
1076  *hmax=imax*TCK_VPR+TCK_VPR/2;
1077  LOG_DEBUG("trovato ilaymax %i %i",*hmax,imax);
1078  LOG_DEBUG(" picco in dbR %f",peak);
1079  }
1080 
1081  LOG_DEBUG("exit status trovo_hvprmax %i",foundlivmax);
1082  return (foundlivmax);
1083 }
float t_ground
2m temperature
Definition: cum_bac.h:230
radarelab::algo::VPR vpr
Informa se il pixel è convettivo.
Definition: cum_bac.h:233
int livmin
quota livello minimo calcolato
Definition: cum_bac.h:240