00001 /* ***************************************************** */ 00002 /* free_main_data Free main data structure */ 00003 /* free_main-data.c */ 00004 /* ***************************************************** */ 00005 /* Author: Christian Page, CERFACS, Toulouse, France. */ 00006 /* ***************************************************** */ 00007 /* Date of creation: nov 2008 */ 00008 /* Last date of modification: nov 2008 */ 00009 /* ***************************************************** */ 00010 /* Original version: 1.0 */ 00011 /* Current revision: */ 00012 /* ***************************************************** */ 00013 /* Revisions */ 00014 /* ***************************************************** */ 00019 /* LICENSE BEGIN 00020 00021 Copyright Cerfacs (Christian Page) (2015) 00022 00023 christian.page@cerfacs.fr 00024 00025 This software is a computer program whose purpose is to downscale climate 00026 scenarios using a statistical methodology based on weather regimes. 00027 00028 This software is governed by the CeCILL license under French law and 00029 abiding by the rules of distribution of free software. You can use, 00030 modify and/ or redistribute the software under the terms of the CeCILL 00031 license as circulated by CEA, CNRS and INRIA at the following URL 00032 "http://www.cecill.info". 00033 00034 As a counterpart to the access to the source code and rights to copy, 00035 modify and redistribute granted by the license, users are provided only 00036 with a limited warranty and the software's author, the holder of the 00037 economic rights, and the successive licensors have only limited 00038 liability. 00039 00040 In this respect, the user's attention is drawn to the risks associated 00041 with loading, using, modifying and/or developing or reproducing the 00042 software by the user in light of its specific status of free software, 00043 that may mean that it is complicated to manipulate, and that also 00044 therefore means that it is reserved for developers and experienced 00045 professionals having in-depth computer knowledge. Users are therefore 00046 encouraged to load and test the software's suitability as regards their 00047 requirements in conditions enabling the security of their systems and/or 00048 data to be ensured and, more generally, to use and operate it in the 00049 same conditions as regards security. 00050 00051 The fact that you are presently reading this means that you have had 00052 knowledge of the CeCILL license and that you accept its terms. 00053 00054 LICENSE END */ 00055 00056 00057 00058 00059 00060 00061 00062 #include <dsclim.h> 00063 00065 void 00066 free_main_data(data_struct *data) { 00067 00072 int i; /* Loop counter */ 00073 int j; /* Loop counter */ 00074 int s; /* Loop counter */ 00075 int tt; /* Loop counter */ 00076 int end_cat; /* End category to process */ 00077 00078 if ( (data->conf->analog_save == TRUE || data->conf->output_only == TRUE) && data->conf->period_ctrl->downscale == TRUE ) 00079 (void) free(data->conf->analog_file_ctrl); 00080 if (data->conf->analog_save == TRUE || data->conf->output_only == TRUE) 00081 (void) free(data->conf->analog_file_other); 00082 00083 for (i=0; i<NCAT; i++) { 00084 00085 for (j=0; j<data->field[i].n_ls; j++) { 00086 00087 if (data->field[i].data[j].clim_info->clim_provided == TRUE) 00088 (void) free(data->field[i].data[j].clim_info->clim_filein_ls); 00089 if (data->field[i].data[j].clim_info->clim_save == TRUE) 00090 (void) free(data->field[i].data[j].clim_info->clim_fileout_ls); 00091 if (data->field[i].data[j].clim_info->clim_save == TRUE || data->field[i].data[j].clim_info->clim_provided == TRUE) 00092 (void) free(data->field[i].data[j].clim_info->clim_nomvar_ls); 00093 (void) free(data->field[i].data[j].clim_info); 00094 00095 if (data->field[i].data[j].eof_info->eof_project == TRUE) { 00096 (void) free(data->field[i].data[j].eof_info->eof_coords); 00097 (void) free(data->field[i].data[j].eof_info->eof_filein_ls); 00098 (void) free(data->field[i].data[j].eof_data->eof_nomvar_ls); 00099 (void) free(data->field[i].data[j].eof_data->sing_nomvar_ls); 00100 00101 if (i == 0 || i == 1) 00102 (void) free(data->field[i].data[j].field_eof_ls); 00103 (void) free(data->field[i].data[j].eof_data->eof_ls); 00104 (void) free(data->field[i].data[j].eof_data->sing_ls); 00105 00106 if ((i == 0 || i == 1) && data->conf->output_only != TRUE) { 00107 (void) free(data->field[i].data[j].eof_info->info->units); 00108 (void) free(data->field[i].data[j].eof_info->info->height); 00109 (void) free(data->field[i].data[j].eof_info->info->coordinates); 00110 (void) free(data->field[i].data[j].eof_info->info->grid_mapping); 00111 (void) free(data->field[i].data[j].eof_info->info->long_name); 00112 } 00113 } 00114 (void) free(data->field[i].data[j].eof_info->info); 00115 (void) free(data->field[i].data[j].eof_info); 00116 (void) free(data->field[i].data[j].eof_data); 00117 00118 if (data->conf->output_only != TRUE) { 00119 (void) free(data->field[i].data[j].info->coordinates); 00120 (void) free(data->field[i].data[j].info->grid_mapping); 00121 (void) free(data->field[i].data[j].info->units); 00122 (void) free(data->field[i].data[j].info->height); 00123 (void) free(data->field[i].data[j].info->long_name); 00124 } 00125 00126 (void) free(data->field[i].data[j].info); 00127 (void) free(data->field[i].data[j].nomvar_ls); 00128 (void) free(data->field[i].data[j].filename_ls); 00129 (void) free(data->field[i].data[j].dimyname); 00130 (void) free(data->field[i].data[j].dimxname); 00131 (void) free(data->field[i].data[j].latname); 00132 (void) free(data->field[i].data[j].lonname); 00133 (void) free(data->field[i].data[j].timename); 00134 00135 if (data->field[i].proj[j].name != NULL) 00136 (void) free(data->field[i].proj[j].name); 00137 if (data->field[i].proj[j].grid_mapping_name != NULL) 00138 (void) free(data->field[i].proj[j].grid_mapping_name); 00139 if (data->field[i].proj[j].coords != NULL) 00140 (void) free(data->field[i].proj[j].coords); 00141 00142 if (data->conf->output_only != TRUE) { 00143 for (s=0; s<data->conf->nseasons; s++) { 00144 if (i == 0 || (i == 1 && data->conf->period_ctrl->downscale == TRUE)) { 00145 (void) free(data->field[i].data[j].down->days_class_clusters[s]); 00146 (void) free(data->field[i].data[j].down->dist[s]); 00147 } 00148 if (i == 1) { 00149 (void) free(data->field[i].data[j].down->mean_dist[s]); 00150 (void) free(data->field[i].data[j].down->var_dist[s]); 00151 } 00152 } 00153 } 00154 if (i == 0 || i == 1) { 00155 (void) free(data->field[i].data[j].down->mean_dist); 00156 (void) free(data->field[i].data[j].down->var_dist); 00157 } 00158 if ( i == 0 || i == 1) { 00159 if (i == 0 || (i == 1 && data->conf->period_ctrl->downscale == TRUE)) { 00160 if (data->conf->output_only != TRUE) { 00161 (void) free(data->field[i].data[j].down->dist_all); 00162 (void) free(data->field[i].data[j].down->days_class_clusters_all); 00163 } 00164 } 00165 (void) free(data->field[i].data[j].down->dist); 00166 (void) free(data->field[i].data[j].down->days_class_clusters); 00167 (void) free(data->field[i].data[j].down->var_pc_norm); 00168 if (i == 0 || (i == 1 && data->conf->period_ctrl->downscale == TRUE)) { 00169 (void) free(data->field[i+2].data[j].down->delta_all); 00170 for (tt=0; tt<data->field[i].analog_days_year.ntime; tt++) 00171 (void) free(data->field[i+2].data[j].down->delta_dayschoice_all[tt]); 00172 (void) free(data->field[i+2].data[j].down->delta_dayschoice_all); 00173 } 00174 00175 /* 00176 if ((data->conf->period_ctrl->downscale == TRUE && i == 1) || i == 0) 00177 if (data->conf->output_only != TRUE) { 00178 for (s=0; s<data->conf->nseasons; s++) { 00179 for (tt=0; tt<data->field[i].analog_days[s].ntime; tt++) { 00180 (void) free(data->field[i].data[j].down->delta_dayschoice[s][tt]); 00181 (void) free(data->field[i].data[j].down->delta[s]); 00182 } 00183 } 00184 (void) free(data->field[i].data[j].down->delta_dayschoice[s]); 00185 } 00186 */ 00187 } 00188 else { 00189 if (data->conf->period_ctrl->downscale == TRUE || i == 2) 00190 if (data->conf->output_only != TRUE) 00191 for (s=0; s<data->conf->nseasons; s++) { 00192 (void) free(data->field[i].data[j].down->smean_norm[s]); 00193 (void) free(data->field[i].data[j].down->sup_val_norm[s]); 00194 } 00195 if (data->conf->output_only != TRUE) { 00196 if (i == 3) { 00197 /* Only for secondary large-scale control field */ 00198 for (s=0; s<data->conf->nseasons; s++) { 00199 (void) free(data->field[i].data[j].down->smean_2d[s]); 00200 (void) free(data->field[i].data[j].down->svar_2d[s]); 00201 } 00202 (void) free(data->field[i].data[j].down->smean_2d); 00203 (void) free(data->field[i].data[j].down->svar_2d); 00204 } 00205 (void) free(data->field[i].data[j].down->smean); 00206 } 00207 00208 (void) free(data->field[i].data[j].down->smean_norm); 00209 (void) free(data->field[i].data[j].down->sup_val_norm); 00210 (void) free(data->field[i].data[j].down->mean); 00211 (void) free(data->field[i].data[j].down->var); 00212 (void) free(data->field[i].data[j].down->delta); 00213 (void) free(data->field[i].data[j].down->delta_dayschoice); 00214 } 00215 00216 (void) free(data->field[i].data[j].down); 00217 00218 (void) free(data->field[i].data[j].field_ls); 00219 } 00220 00221 (void) free(data->field[i].lat_ls); 00222 (void) free(data->field[i].lon_ls); 00223 00224 if (data->field[i].lon_eof_ls != NULL) 00225 (void) free(data->field[i].lon_eof_ls); 00226 if (data->field[i].lat_eof_ls != NULL) 00227 (void) free(data->field[i].lat_eof_ls); 00228 00229 if (data->conf->period_ctrl->downscale == TRUE) 00230 end_cat = CTRL_FIELD_LS; 00231 else 00232 end_cat = FIELD_LS; 00233 if (i >= FIELD_LS && i <= end_cat) { 00234 if (data->field[i].n_ls > 0) { 00235 if (data->conf->output_only != TRUE) { 00236 for (s=0; s<data->conf->nseasons; s++) { 00237 (void) free(data->field[i].precip_index[s]); 00238 (void) free(data->field[i].analog_days[s].tindex); 00239 (void) free(data->field[i].analog_days[s].tindex_all); 00240 (void) free(data->field[i].analog_days[s].tindex_s_all); 00241 (void) free(data->field[i].analog_days[s].time); 00242 (void) free(data->field[i].analog_days[s].year); 00243 (void) free(data->field[i].analog_days[s].month); 00244 (void) free(data->field[i].analog_days[s].day); 00245 (void) free(data->field[i].analog_days[s].year_s); 00246 (void) free(data->field[i].analog_days[s].month_s); 00247 (void) free(data->field[i].analog_days[s].day_s); 00248 for (tt=0; tt<data->field[i].analog_days[s].ntime; tt++) { 00249 if (data->field[i].analog_days[s].analog_dayschoice[tt] != NULL) 00250 (void) free(data->field[i].analog_days[s].analog_dayschoice[tt]); 00251 if (data->field[i].analog_days[s].metric_norm[tt] != NULL) 00252 (void) free(data->field[i].analog_days[s].metric_norm[tt]); 00253 if (data->field[i].analog_days[s].tindex_dayschoice[tt] != NULL) 00254 (void) free(data->field[i].analog_days[s].tindex_dayschoice[tt]); 00255 } 00256 (void) free(data->field[i].analog_days[s].analog_dayschoice); 00257 (void) free(data->field[i].analog_days[s].tindex_dayschoice); 00258 (void) free(data->field[i].analog_days[s].metric_norm); 00259 (void) free(data->field[i].analog_days[s].ndayschoice); 00260 } 00261 (void) free(data->field[i].analog_days_year.tindex); 00262 (void) free(data->field[i].analog_days_year.tindex_all); 00263 (void) free(data->field[i].analog_days_year.tindex_s_all); 00264 (void) free(data->field[i].analog_days_year.time); 00265 for (tt=0; tt<data->field[i].analog_days_year.ntime; tt++) { 00266 if (data->field[i].analog_days_year.analog_dayschoice[tt] != NULL) 00267 (void) free(data->field[i].analog_days_year.analog_dayschoice[tt]); 00268 if (data->field[i].analog_days_year.metric_norm[tt] != NULL) 00269 (void) free(data->field[i].analog_days_year.metric_norm[tt]); 00270 } 00271 (void) free(data->field[i].analog_days_year.analog_dayschoice); 00272 (void) free(data->field[i].analog_days_year.tindex_dayschoice); 00273 (void) free(data->field[i].analog_days_year.metric_norm); 00274 (void) free(data->field[i].analog_days_year.ndayschoice); 00275 } 00276 (void) free(data->field[i].analog_days_year.year); 00277 (void) free(data->field[i].analog_days_year.month); 00278 (void) free(data->field[i].analog_days_year.day); 00279 (void) free(data->field[i].analog_days_year.year_s); 00280 (void) free(data->field[i].analog_days_year.month_s); 00281 (void) free(data->field[i].analog_days_year.day_s); 00282 } 00283 } 00284 00285 (void) free(data->field[i].precip_index); 00286 00287 if (data->field[i].n_ls > 0) { 00288 (void) free(data->field[i].data); 00289 if (data->conf->output_only != TRUE) { 00290 (void) free(data->field[i].time_s->year); 00291 (void) free(data->field[i].time_s->month); 00292 (void) free(data->field[i].time_s->day); 00293 (void) free(data->field[i].time_s->hour); 00294 (void) free(data->field[i].time_s->minutes); 00295 (void) free(data->field[i].time_s->seconds); 00296 } 00297 (void) free(data->field[i].proj); 00298 } 00299 (void) free(data->field[i].time_s); 00300 (void) free(data->field[i].time_ls); 00301 } 00302 00303 for (i=0; i<NCAT; i++) 00304 (void) free(data->field[i].analog_days); 00305 00306 for (s=0; s<data->conf->nseasons; s++) { 00307 if (data->conf->output_only != TRUE) { 00308 (void) free(data->learning->data[s].time_s->year); 00309 (void) free(data->learning->data[s].time_s->month); 00310 (void) free(data->learning->data[s].time_s->day); 00311 (void) free(data->learning->data[s].time_s->hour); 00312 (void) free(data->learning->data[s].time_s->minutes); 00313 (void) free(data->learning->data[s].time_s->seconds); 00314 (void) free(data->learning->data[s].time); 00315 (void) free(data->learning->data[s].class_clusters); 00316 } 00317 (void) free(data->learning->data[s].time_s); 00318 if (data->conf->season[s].nmonths > 0) 00319 (void) free(data->conf->season[s].month); 00320 00321 if (data->conf->output_only != TRUE) { 00322 (void) free(data->learning->data[s].weight); 00323 (void) free(data->learning->data[s].precip_reg); 00324 if (data->learning->data[s].precip_reg_dist != NULL) 00325 (void) free(data->learning->data[s].precip_reg_dist); 00326 (void) free(data->learning->data[s].precip_reg_cst); 00327 if (data->learning->data[s].precip_reg_err != NULL) 00328 (void) free(data->learning->data[s].precip_reg_err); 00329 if (data->learning->learning_provided == FALSE) { 00330 (void) free(data->learning->data[s].precip_reg_rsq); 00331 (void) free(data->learning->data[s].precip_reg_vif); 00332 (void) free(data->learning->data[s].precip_reg_autocor); 00333 } 00334 (void) free(data->learning->data[s].precip_index); 00335 (void) free(data->learning->data[s].sup_index); 00336 if (data->learning->data[s].sup_val != NULL) 00337 (void) free(data->learning->data[s].sup_val); 00338 } 00339 } 00340 00341 if (data->learning->learning_provided == FALSE) { 00342 (void) free(data->learning->obs->filename_eof); 00343 (void) free(data->learning->obs->nomvar_eof); 00344 (void) free(data->learning->obs->nomvar_sing); 00345 (void) free(data->learning->obs->eof); 00346 (void) free(data->learning->obs->sing); 00347 00348 for (s=0; s<data->conf->nseasons; s++) 00349 (void) free(data->learning->data[s].precip_index_obs); 00350 00351 (void) free(data->learning->obs->time_s->year); 00352 (void) free(data->learning->obs->time_s->month); 00353 (void) free(data->learning->obs->time_s->day); 00354 (void) free(data->learning->obs->time_s->hour); 00355 (void) free(data->learning->obs->time_s->minutes); 00356 (void) free(data->learning->obs->time_s->seconds); 00357 (void) free(data->learning->obs->time_s); 00358 00359 (void) free(data->learning->rea->time_s->year); 00360 (void) free(data->learning->rea->time_s->month); 00361 (void) free(data->learning->rea->time_s->day); 00362 (void) free(data->learning->rea->time_s->hour); 00363 (void) free(data->learning->rea->time_s->minutes); 00364 (void) free(data->learning->rea->time_s->seconds); 00365 (void) free(data->learning->rea->time_s); 00366 00367 (void) free(data->learning->rea->filename_eof); 00368 (void) free(data->learning->rea->nomvar_eof); 00369 (void) free(data->learning->rea->nomvar_sing); 00370 (void) free(data->learning->rea->eof); 00371 (void) free(data->learning->rea->sing); 00372 00373 (void) free(data->learning->obs); 00374 (void) free(data->learning->rea); 00375 00376 (void) free(data->learning->nomvar_rea_sup); 00377 (void) free(data->learning->filename_rea_sup); 00378 (void) free(data->learning->rea_coords); 00379 (void) free(data->learning->rea_gridname); 00380 (void) free(data->learning->rea_dimxname); 00381 (void) free(data->learning->rea_dimyname); 00382 (void) free(data->learning->rea_lonname); 00383 (void) free(data->learning->rea_latname); 00384 (void) free(data->learning->rea_timename); 00385 00386 if (data->learning->sup_lon != NULL) 00387 (void) free(data->learning->sup_lon); 00388 if (data->learning->sup_lat != NULL) 00389 (void) free(data->learning->sup_lat); 00390 00391 (void) free(data->learning->obs_dimxname); 00392 (void) free(data->learning->obs_dimyname); 00393 (void) free(data->learning->obs_lonname); 00394 (void) free(data->learning->obs_latname); 00395 (void) free(data->learning->obs_timename); 00396 (void) free(data->learning->obs_eofname); 00397 00398 if (data->learning->lon != NULL) 00399 (void) free(data->learning->lon); 00400 if (data->learning->lat != NULL) 00401 (void) free(data->learning->lat); 00402 } 00403 00404 if (data->conf->output_only != TRUE) { 00405 (void) free(data->learning->time_s->year); 00406 (void) free(data->learning->time_s->month); 00407 (void) free(data->learning->time_s->day); 00408 (void) free(data->learning->time_s->hour); 00409 (void) free(data->learning->time_s->minutes); 00410 (void) free(data->learning->time_s->seconds); 00411 } 00412 00413 (void) free(data->learning->time_s); 00414 00415 if (data->learning->learning_provided == TRUE && data->conf->output_only != TRUE) { 00416 (void) free(data->learning->filename_open_weight); 00417 (void) free(data->learning->filename_open_learn); 00418 (void) free(data->learning->filename_open_clust_learn); 00419 } 00420 00421 if (data->conf->output_only != TRUE) 00422 (void) free(data->learning->pc_normalized_var); 00423 00424 (void) free(data->learning->nomvar_time); 00425 (void) free(data->learning->nomvar_weight); 00426 (void) free(data->learning->nomvar_class_clusters); 00427 (void) free(data->learning->nomvar_precip_reg); 00428 (void) free(data->learning->nomvar_precip_reg_dist); 00429 (void) free(data->learning->nomvar_precip_reg_cst); 00430 (void) free(data->learning->nomvar_precip_reg_rsq); 00431 (void) free(data->learning->nomvar_precip_reg_acor); 00432 (void) free(data->learning->nomvar_precip_reg_vif); 00433 if (data->learning->nomvar_precip_reg_err != NULL) 00434 (void) free(data->learning->nomvar_precip_reg_err); 00435 (void) free(data->learning->nomvar_precip_index); 00436 (void) free(data->learning->nomvar_precip_index_obs); 00437 (void) free(data->learning->nomvar_sup_index); 00438 (void) free(data->learning->nomvar_sup_val); 00439 (void) free(data->learning->nomvar_sup_index_mean); 00440 (void) free(data->learning->nomvar_sup_index_var); 00441 (void) free(data->learning->nomvar_pc_normalized_var); 00442 00443 (void) free(data->learning->sup_latname); 00444 (void) free(data->learning->sup_lonname); 00445 00446 if (data->learning->learning_save == TRUE && data->conf->output_only != TRUE) { 00447 (void) free(data->learning->filename_save_weight); 00448 (void) free(data->learning->filename_save_learn); 00449 (void) free(data->learning->filename_save_clust_learn); 00450 } 00451 00452 if (data->info->title != NULL) { 00453 (void) free(data->info->title); 00454 (void) free(data->info->title_french); 00455 (void) free(data->info->summary); 00456 (void) free(data->info->summary_french); 00457 (void) free(data->info->keywords); 00458 (void) free(data->info->processor); 00459 (void) free(data->info->software); 00460 (void) free(data->info->description); 00461 (void) free(data->info->institution); 00462 (void) free(data->info->creator_email); 00463 (void) free(data->info->creator_url); 00464 (void) free(data->info->creator_name); 00465 (void) free(data->info->version); 00466 (void) free(data->info->scenario); 00467 (void) free(data->info->scenario_co2); 00468 (void) free(data->info->model); 00469 (void) free(data->info->institution_model); 00470 (void) free(data->info->country); 00471 (void) free(data->info->member); 00472 (void) free(data->info->downscaling_forcing); 00473 (void) free(data->info->timestep); 00474 (void) free(data->info->contact_email); 00475 (void) free(data->info->contact_name); 00476 (void) free(data->info->other_contact_email); 00477 (void) free(data->info->other_contact_name); 00478 } 00479 00480 (void) free(data->reg->filename); 00481 (void) free(data->reg->dimxname); 00482 (void) free(data->reg->dimyname); 00483 (void) free(data->reg->lonname); 00484 (void) free(data->reg->latname); 00485 (void) free(data->reg->ptsname); 00486 if (data->reg->reg_save == TRUE) { 00487 (void) free(data->reg->filename_save_ctrl_reg); 00488 (void) free(data->reg->filename_save_other_reg); 00489 (void) free(data->reg->timename); 00490 } 00491 if (data->conf->output_only != TRUE) { 00492 (void) free(data->reg->lat); 00493 (void) free(data->reg->lon); 00494 } 00495 00496 if (data->secondary_mask->use_mask == TRUE) { 00497 if (data->conf->output_only != TRUE) 00498 (void) free(data->secondary_mask->field); 00499 (void) free(data->secondary_mask->filename); 00500 (void) free(data->secondary_mask->maskname); 00501 (void) free(data->secondary_mask->lonname); 00502 (void) free(data->secondary_mask->latname); 00503 (void) free(data->secondary_mask->coords); 00504 (void) free(data->secondary_mask->dimxname); 00505 (void) free(data->secondary_mask->dimyname); 00506 (void) free(data->secondary_mask->dimcoords); 00507 (void) free(data->secondary_mask->proj); 00508 (void) free(data->secondary_mask->lat); 00509 (void) free(data->secondary_mask->lon); 00510 } 00511 (void) free(data->secondary_mask); 00512 00513 if (data->conf->learning_maskfile->use_mask == TRUE) { 00514 if (data->conf->output_only != TRUE) 00515 (void) free(data->conf->learning_maskfile->field); 00516 (void) free(data->conf->learning_maskfile->filename); 00517 (void) free(data->conf->learning_maskfile->maskname); 00518 (void) free(data->conf->learning_maskfile->lonname); 00519 (void) free(data->conf->learning_maskfile->latname); 00520 (void) free(data->conf->learning_maskfile->coords); 00521 (void) free(data->conf->learning_maskfile->dimxname); 00522 (void) free(data->conf->learning_maskfile->dimyname); 00523 (void) free(data->conf->learning_maskfile->dimcoords); 00524 (void) free(data->conf->learning_maskfile->proj); 00525 (void) free(data->conf->learning_maskfile->lat); 00526 (void) free(data->conf->learning_maskfile->lon); 00527 } 00528 (void) free(data->conf->learning_maskfile); 00529 00530 if (data->conf->obs_var->nobs_var > 0) { 00531 for (i=0; i<data->conf->obs_var->nobs_var; i++) { 00532 (void) free(data->conf->obs_var->acronym[i]); 00533 (void) free(data->conf->obs_var->netcdfname[i]); 00534 (void) free(data->conf->obs_var->name[i]); 00535 (void) free(data->conf->obs_var->post[i]); 00536 (void) free(data->conf->obs_var->clim[i]); 00537 (void) free(data->conf->obs_var->output[i]); 00538 (void) free(data->conf->obs_var->height[i]); 00539 (void) free(data->conf->obs_var->units[i]); 00540 } 00541 (void) free(data->conf->obs_var->acronym); 00542 (void) free(data->conf->obs_var->netcdfname); 00543 (void) free(data->conf->obs_var->name); 00544 (void) free(data->conf->obs_var->factor); 00545 (void) free(data->conf->obs_var->delta); 00546 (void) free(data->conf->obs_var->post); 00547 (void) free(data->conf->obs_var->clim); 00548 (void) free(data->conf->obs_var->output); 00549 (void) free(data->conf->obs_var->height); 00550 (void) free(data->conf->obs_var->units); 00551 } 00552 (void) free(data->conf->obs_var->frequency); 00553 (void) free(data->conf->obs_var->template); 00554 (void) free(data->conf->obs_var->latname); 00555 (void) free(data->conf->obs_var->lonname); 00556 (void) free(data->conf->obs_var->timename); 00557 (void) free(data->conf->obs_var->altitude); 00558 (void) free(data->conf->obs_var->altitudename); 00559 (void) free(data->conf->obs_var->proj->name); 00560 (void) free(data->conf->obs_var->proj->coords); 00561 (void) free(data->conf->obs_var->proj->grid_mapping_name); 00562 (void) free(data->conf->obs_var->dimxname); 00563 (void) free(data->conf->obs_var->dimyname); 00564 (void) free(data->conf->obs_var->dimcoords); 00565 (void) free(data->conf->obs_var->proj); 00566 (void) free(data->conf->obs_var->path); 00567 (void) free(data->conf->obs_var); 00568 00569 (void) free(data->conf->clim_filter_type); 00570 (void) free(data->conf->classif_type); 00571 (void) free(data->conf->time_units); 00572 (void) free(data->conf->cal_type); 00573 (void) free(data->conf->dimxname_eof); 00574 (void) free(data->conf->dimyname_eof); 00575 (void) free(data->conf->lonname_eof); 00576 (void) free(data->conf->latname_eof); 00577 (void) free(data->conf->eofname); 00578 (void) free(data->conf->ptsname); 00579 (void) free(data->conf->clustname); 00580 (void) free(data->conf->output_path); 00581 00582 if (data->conf->nperiods > 0) 00583 (void) free(data->conf->period); 00584 (void) free(data->conf->period_ctrl); 00585 (void) free(data->conf->season); 00586 00587 (void) free(data->learning->data); 00588 00589 (void) free(data->conf->config); 00590 00591 (void) free(data->conf); 00592 (void) free(data->info); 00593 (void) free(data->learning); 00594 (void) free(data->reg); 00595 (void) free(data->field); 00596 }