00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <glib.h>
00022 #include "plumevars.h"
00023 #include "plumeinput.h"
00024 #include <utils/utils.h>
00025
00026
00027
00028 gboolean plume2d(Plume_inputs *plume_const,Plume_river river_passed,int ngrains_passed,Plume_sediment *sedload_passed, double dx,double **deposit,int depositLen,Plume_data*);
00029 gboolean plume3d( Plume_inputs *plume_const , Plume_river river ,
00030 int n_grains , Plume_sediment *sedload ,
00031 Eh_dbl_grid *deposit , Plume_data *data );
00032
00033 Plume_data *plume_data_init( Plume_data *data )
00034 {
00035 data->x_len = 0;
00036 data->y_len = 0;
00037 data->ccnc = NULL;
00038 data->ncnc = NULL;
00039 data->deps = NULL;
00040 data->dist = NULL;
00041 data->ualb = NULL;
00042 data->pcent = NULL;
00043 data->xval = NULL;
00044 data->yval = NULL;
00045
00046 return data;
00047 }
00048
00049 void destroy_plume_data( Plume_data *grid )
00050 {
00051 if ( grid )
00052 {
00053 eh_free( grid->xval );
00054 eh_free( grid->yval );
00055
00056 free_d3tensor( grid->ccnc );
00057 free_d3tensor( grid->ncnc );
00058 free_d3tensor( grid->deps );
00059 free_d3tensor( grid->dist );
00060 free_dmatrix ( grid->ualb );
00061 free_dmatrix ( grid->pcent );
00062
00063 eh_free( grid );
00064 }
00065 }
00066
00067 gboolean plume2d( Plume_inputs *plume_const , Plume_river river ,
00068 int n_grains , Plume_sediment *sedload ,
00069 double dx , double **deposit ,
00070 int deposit_len , Plume_data *data )
00071 {
00072 int err;
00073 Plume_enviro env;
00074 Plume_ocean ocean;
00075 Plume_grid *grid = data;
00076 Plume_options opt;
00077
00078 ocean.Cw = plume_const->ocean_concentration;
00079 ocean.So = 1.;
00080 ocean.Sw = 32.1;
00081 ocean.cc = .5;
00082 ocean.vo = 0.;
00083
00084 grid->ymin = plume_const->plume_width/2 - plume_const->plume_width;
00085 grid->ymax = grid->ymin + plume_const->plume_width;
00086 grid->ndx = plume_const->ndx;
00087 grid->ndy = plume_const->ndy;
00088 grid->max_len = dx*deposit_len;
00089
00090 opt.fjrd = 1;
00091 opt.strt = 1;
00092 opt.kwf = 0;
00093 opt.o1 = 0;
00094 opt.o2 = 1;
00095 opt.o3 = 0;
00096
00097 env.n_grains = n_grains;
00098 env.lat = 45.;
00099 env.river = &river;
00100 env.ocean = &ocean;
00101 env.sed = sedload;
00102
00103 err = plume( &env , grid , &opt );
00104 if ( !err )
00105 {
00106
00107 plumeout2( &env , grid , dx,deposit,deposit_len,n_grains,plume_const->plume_width);
00108
00109 return TRUE;
00110 }
00111 else
00112 return FALSE;
00113
00114 }
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 gboolean plume3d( Plume_inputs *plume_const , Plume_river river ,
00191 int n_grains , Plume_sediment *sedload ,
00192 Eh_dbl_grid *deposit , Plume_data *data )
00193 {
00194 int err;
00195 Plume_enviro env;
00196 Plume_ocean ocean;
00197 Plume_grid *grid = data;
00198 Plume_options opt;
00199
00200 ocean.Cw = plume_const->ocean_concentration;
00201 ocean.So = 1.;
00202 ocean.Sw = 32.1;
00203 ocean.cc = .9;
00204 ocean.vo = plume_const->current_velocity;
00205
00206 grid->ymin = plume_const->plume_width/2 - plume_const->plume_width;
00207 grid->ymax = grid->ymin + plume_const->plume_width;
00208 grid->ndx = plume_const->ndx;
00209 grid->ndy = plume_const->ndy;
00210 grid->max_len = eh_grid_y(deposit[0])[eh_grid_n_y(deposit[0])-1]
00211 - eh_grid_y(deposit[0])[0];
00212
00213 opt.fjrd = 0;
00214 opt.strt = 0;
00215 opt.kwf = 1;
00216 opt.o1 = 0;
00217 opt.o2 = 1;
00218 opt.o3 = 0;
00219
00220 if ( fabs(ocean.vo) < 1e-5 )
00221 opt.strt = 1;
00222
00223 env.n_grains = n_grains;
00224 env.lat = 49.;
00225 env.river = &river;
00226 env.ocean = &ocean;
00227 env.sed = sedload;
00228
00229 err = plume( &env , grid , &opt );
00230 if ( !err )
00231 {
00232
00233 plumeout3( &env , grid , deposit );
00234
00235 return TRUE;
00236 }
00237 else
00238 return FALSE;
00239
00240 }
00241