|
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 1099 del file cum_bac.cpp.
Referenzia elaboradar::CUM_BAC::date, elaboradar::CUM_BAC::logging_category, e radarelab::File::open().
1102 int ier=1,ier_ana=0,liv0;
1103 char date[]= "000000000000";
1111 int tipo_profilo=-1;
1112 float v600sottobb=NODATAVPR;
1113 float v1000=NODATAVPR;
1114 float v1500=NODATAVPR;
1115 float vliq=NODATAVPR;
1116 float vhliquid=NODATAVPR;
1117 float vprmax=NODATAVPR;
1125 LOG_WARN( "non ho T,...");
1128 LOG_ERROR( " non ho trovato hvprmax, nè T, esco");
1138 LOG_ERROR( " temperatura alta e non ho trovato hvprmax, esco");
1150 LOG_INFO( " temperatura da scioglimento e massimo in quota");
1154 LOG_ERROR( " temperatura da scioglimento ma superiore a temperatura max neve e non ho trovato hvprmax, esco");
1159 if ( hvprmax > liv0) LOG_INFO( " il livello %i è sotto la Bright band, ma T bassa interpolo", livmin);
1160 else LOG_INFO( " il livello %i potrebbe essere dentro la Bright Band, interpolo", livmin);
1168 LOG_INFO( " temperatura da neve o scioglimento e massimo in quota");
1172 LOG_INFO( " temperatura da neve o scioglimento e massimo non trovato,neve , non interpolo");
1181 InterpolaVPR_GSL iv;
1191 LOG_INFO( " interpolazione fallita");
1192 switch (tipo_profilo)
1203 *vpr_liq= vpr.val[( hvprmax+1000)/TCK_VPR]*2.15;
1209 LOG_INFO( " interpolazione eseguita con successo");
1212 const char* vpr_arch = getenv( "VPR_ARCH");
1213 if (!vpr_arch) throw runtime_error( "VPR_ARCH is not defined");
1214 string fname(vpr_arch);
1216 File file(logging_category);
1217 file.open(fname, "wt", "vpr interpolato");
1218 for ( unsigned i = 0; i < NMAXLAYER; ++i)
1219 fprintf(file, " %f \n", cum_bac. dbz.RtoDBZ(iv.vpr_int[i]));
1222 if (tipo_profilo == 2 ) {
1223 *hliq=(iv.E-2.1*iv.G)*1000.;
1227 *vpr_liq= vpr.val[( hvprmax+1000)/TCK_VPR]*2.15;
1230 *hliq=(iv.E-2.1*iv.G)*1000.;
1233 *vpr_liq= vpr.val[(int)(*hliq/TCK_VPR)];
1237 if (*hliq<0) *hliq=0;
1251 LOG_INFO( "TIPO_PROFILO= %i vpr_liq %f hliq %f", tipo_profilo, *vpr_liq,*hliq );
1259 tempo = gmtime(&Time);
1260 sprintf(date, "%04d%02d%02d%02d%02d",tempo->tm_year+1900, tempo->tm_mon+1,
1261 tempo->tm_mday,tempo->tm_hour, tempo->tm_min);
1270 if (( hvprmax+1000)/TCK_VPR < NMAXLAYER )
1272 if (( hvprmax+1500)/TCK_VPR < NMAXLAYER )
1277 if (FILE* test_vpr=fopen(getenv( "TEST_VPR"), "a+"))
1279 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);
1288 LOG_INFO( "fatta scrittura hmax vpr = %d", hvprmax);
radarelab::algo::DBZ dbz ????
void write_vpr_hmax(int hvprmax) write in $VPR_HMAX the vpr peak's height.
CUM_BAC & cum_bac oggeto CUM_BAC di riferimento
std::shared_ptr< LoadInfo > load_info Polar volume information.
float t_ground 2m temperature
radarelab::Volume< double > & volume Polar volume of Reflectivity.
int hvprmax quota picco vpr
radarelab::algo::VPR vpr Informa se il pixel è convettivo.
int ier_max flag d'errore su calcolo quota max
int livmin quota livello minimo calcolato
Open a file taking its name from a given env variable.
|