free_main_data.c

Go to the documentation of this file.
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 }

Generated on 12 May 2016 for DSCLIM by  doxygen 1.6.1