|
◆ analyse_VPR()
int elaboradar::CalcoloVPR::analyse_VPR |
( |
float * |
vpr_liq, |
|
|
int * |
snow, |
|
|
float * |
hliq |
|
) |
| |
funzione che analizza il profilo
analizza il profilo usando : la temperatura al suolo, la quota del massimo, e una funzione di interpolazione - Parametri
-
[out] | vpr_liq | valore del profilo al livello liquido |
[out] | snow | matrice che indica se è presente neve o no secondo l'analisi fatta |
[out] | hliq | quota del livello liquido |
- Restituisce
- ier_ana valore che indica se tutto è andato a buon fine (0) o no (1)
Definizione alla linea 1180 del file cum_bac.cpp.
1183 int ier=1,ier_ana=0,liv0;
1184 char date[]= "000000000000";
1192 int tipo_profilo=-1;
1193 float v600sottobb=NODATAVPR;
1194 float v1000=NODATAVPR;
1195 float v1500=NODATAVPR;
1196 float vliq=NODATAVPR;
1197 float vhliquid=NODATAVPR;
1198 float vprmax=NODATAVPR;
1206 LOG_WARN( "non ho T,...");
1209 LOG_ERROR( " non ho trovato hvprmax, nè T, esco");
1219 LOG_ERROR( " temperatura alta e non ho trovato hvprmax, esco");
1231 LOG_INFO( " temperatura da scioglimento e massimo in quota");
1235 LOG_ERROR( " temperatura da scioglimento ma superiore a temperatura max neve e non ho trovato hvprmax, esco");
1240 if ( hvprmax > liv0) LOG_INFO( " il livello %i è sotto la Bright band, ma T bassa interpolo", livmin);
1241 else LOG_INFO( " il livello %i potrebbe essere dentro la Bright Band, interpolo", livmin);
1249 LOG_INFO( " temperatura da neve o scioglimento e massimo in quota");
1253 LOG_INFO( " temperatura da neve o scioglimento e massimo non trovato,neve , non interpolo");
1262 InterpolaVPR_GSL iv;
1272 LOG_INFO( " interpolazione fallita");
1273 switch (tipo_profilo)
1284 *vpr_liq= vpr.val[( hvprmax+1000)/TCK_VPR]*2.15;
1290 LOG_INFO( " interpolazione eseguita con successo");
1293 const char* vpr_arch = getenv( "VPR_ARCH");
1294 if (!vpr_arch) throw runtime_error( "VPR_ARCH is not defined");
1295 string fname(vpr_arch);
1297 File file(logging_category);
1298 file.open(fname, "wt", "vpr interpolato");
1299 for ( unsigned i = 0; i < NMAXLAYER; ++i)
1300 fprintf(file, " %f \n", cum_bac. dbz.RtoDBZ(iv.vpr_int[i]));
1303 if (tipo_profilo == 2 ) {
1304 *hliq=(iv.E-2.1*iv.G)*1000.;
1308 *vpr_liq= vpr.val[( hvprmax+1000)/TCK_VPR]*2.15;
1311 *hliq=(iv.E-2.1*iv.G)*1000.;
1314 *vpr_liq= vpr.val[(int)(*hliq/TCK_VPR)];
1318 if (*hliq<0) *hliq=0;
1333 LOG_INFO( "TIPO_PROFILO= %i vpr_liq %f hliq %f", tipo_profilo, *vpr_liq,*hliq );
1341 tempo = gmtime(&Time);
1342 sprintf(date, "%04d%02d%02d%02d%02d",tempo->tm_year+1900, tempo->tm_mon+1,
1343 tempo->tm_mday,tempo->tm_hour, tempo->tm_min);
1352 if (( hvprmax+1000)/TCK_VPR < NMAXLAYER )
1354 if (( hvprmax+1500)/TCK_VPR < NMAXLAYER )
1359 if (FILE* test_vpr=fopen(getenv( "TEST_VPR"), "a+"))
1361 fprintf(test_vpr, "%s %i %i -1 %f %f %f %f %f %f %f %f %f %f %f %f %f %f \n",date, hvprmax,tipo_profilo,iv.chisqfin,*hliq,vliq,vhliquid,v600sottobb,v1000+6,v1500+6,vprmax,iv.rmsefin,iv.B,iv.E,iv.G,iv.C,iv.F);
1370 LOG_INFO( "fatta scrittura hmax vpr = %d", hvprmax);
void write_vpr_hmax(int hvprmax) write in $VPR_HMAX the vpr peak's height.
radarelab::Volume< double > & volume Set to Z undetect value the Zpixels classified as non-meteo echoes.
radarelab::algo::DBZ dbz ????
Open a file taking its name from a given env variable.
std::shared_ptr< LoadInfo > load_info Polar volume information.
int ier_max flag d'errore su calcolo quota max
int livmin quota livello minimo calcolato
radarelab::algo::VPR vpr Informa se il pixel è convettivo.
int hvprmax quota picco vpr
CUM_BAC & cum_bac oggeto CUM_BAC di riferimento
float t_ground 2m temperature
Referenzia elaboradar::CUM_BAC::date, elaboradar::CUM_BAC::logging_category, e radarelab::File::open().
|