Main Page   Data Structures   File List   Data Fields   Globals  

ini_conditions.c

Go to the documentation of this file.
00001 /*------------------------------------------------------------------*/
00002 /* SCCS Information: %W%    %G% */
00003 /*------------------------------------------------------------------*/
00004 #include "utilf.h"
00005 #include "stypes.h"
00006 #include <readSIunits.h>
00007 #include "markers.h"
00008 #include "ini_conditions.h"
00009 #include "plgndr.h"
00010 
00011 #define YMIN 1.9999
00012 
00013 
00014 static real angle(real x, real y)
00015 {
00016   real theta;
00017   
00018   if (x == 0.0) {
00019     if (y >= 0.0)
00020       return PI/2.;
00021     return -PI/2.;
00022   }
00023   theta = atan(y/x);
00024   if (x < 0.0)
00025     theta += PI;
00026   return theta;
00027 }
00028 
00029 
00030 static void inidrop(interface *in,
00031                     real2D u, real2D v, real2D p,
00032                     real sigma,
00033                     real tau, 
00034                     real xvel,
00035                     real xc, real diameter,
00036                     real eps, int mode,
00037                     int nx, int ny)
00038 {
00039   real h, r, tpi, alpha;
00040   int i, j;
00041   
00042   h = 1.0 / (nx - 2);
00043   
00044   printf("------- Initialisation parameters ------\n");
00045   printf("Droplet: C=(%g,0), D=%g, mode=%d, eps=%g\n", 
00046          xc, diameter, mode, eps);
00047     
00048   diameter *= 0.5 * (nx - 2);
00049   printf("radius: %f\n", diameter);
00050   sigma *= tau * tau / (h * h * h);
00051   xc = xc*(nx - 2) + 2.0;
00052 
00053   for (i = 1; i <= nx; i++)
00054     for (j = 1; j <= ny; j++) { 
00055       /*
00056         u[i][j] = xvel*tau/h*(i - 0.5*(nx + 1))/(0.5*(nx + 1));
00057         v[i][j] = xvel*tau/h*(j - 0.5*(ny + 1))/(0.5*(nx + 1));
00058         */
00059       r = sqrt(sq(i + 0.5 - xc) + sq(j - 1.5));
00060       alpha = angle(i + 0.5 - xc, j - 1.5);
00061       if (r <= diameter*(1. + eps*sphericalY(mode, 0, alpha)))
00062         u[i][j] = xvel*tau/h;
00063       p[i][j] = - 2.*sigma/diameter;
00064     }
00065 
00066   in->n = 10*nx;
00067   in->x = (real *)malloc(in->n * sizeof(real));
00068   in->y = (real *)malloc(in->n * sizeof(real));
00069   in->t = (real *)malloc(in->n * sizeof(real));
00070   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00071   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00072   in->p = (real *)malloc(in->n * sizeof(real));
00073   
00074   for (i = 0; i < in->n; i++) {
00075     tpi = PI*i/(in->n - 1);
00076     r = diameter*(1. + eps*sphericalY(mode, 0, tpi));
00077     in->x[i] = xc + r*cos(tpi);
00078     in->y[i] = YMIN + r*sin(tpi);
00079   }
00080   in->bc = AXITRUE;
00081 }
00082 
00083 
00084 void inidroplet(interface **in,
00085                 int *nin,
00086                 real2D u, real2D v, real2D p,
00087                 real sigma,
00088                 real tau, 
00089                 real xvel,
00090                 int nx, int ny)
00091 {
00092   real diameter, xc, eps = 0.0;
00093   int mode = 1;
00094   
00095   diameter = 0.5; xc = 0.5;
00096 
00097   realreadSI("diameter", &diameter, stdin);
00098   realreadSI("xc", &xc, stdin);
00099   intread("mode", &mode, stdin);
00100   realreadSI("eps", &eps, stdin);
00101 
00102   *in = (interface *)malloc(sizeof(interface));
00103   *nin = 1;
00104 
00105   inidrop(*in, u, v, p, sigma, tau, xvel, xc, diameter, eps, mode, nx, ny);
00106 }
00107 
00108 
00109 void inidroplets(interface **in,
00110                 int *nin,
00111                 real2D u, real2D v, real2D p, 
00112                 real sigma,
00113                 real tau, 
00114                 real xvel,
00115                 int nx, int ny)
00116 {
00117   real diameter, xc, yc, eps = 0.0;
00118   int mode = 1;
00119   
00120   diameter = 0.5; xc = 0.5; yc = 0.5;
00121 
00122   realreadSI("diameter", &diameter, stdin);
00123   realreadSI("xc", &xc, stdin);
00124   realreadSI("yc", &yc, stdin);
00125   intread("mode", &mode, stdin);
00126   realreadSI("eps", &eps, stdin);
00127 
00128   *in = (interface *)malloc(2 * sizeof(interface));
00129   *nin = 2;
00130   inidrop(&(*in)[0], u, v, p, sigma, tau, xvel, 
00131           xc - 0.6*diameter, 
00132           diameter, eps, mode, nx, ny);
00133   inidrop(&(*in)[1], u, v, p, sigma, tau, -xvel, xc + 0.6*diameter, 
00134           diameter, eps, mode, nx, ny);
00135 }
00136 
00137 
00138 void inifusion(interface *in, int nx, int ny)
00139 {
00140   real h, r, tpi;
00141   real diameter = 0.4, eps = 0.0, xc1, xc2;
00142   int mode = 1;
00143   int i;
00144   real width = 3.0, height = 2.0, theta;
00145   
00146   h = 1.0 / (nx - 2);
00147 
00148   realreadSI("diameter", &diameter, stdin);
00149   intread("mode", &mode, stdin);
00150   realreadSI("eps", &eps, stdin);
00151   
00152   printf("------- Initialisation parameters ------\n");
00153   printf("Fusion: D=%g, mode=%d, eps=%g\n", diameter, mode, eps);
00154     
00155   diameter *= 0.5 * (nx - 2);
00156   printf("radius: %f\n", diameter);
00157   xc1 = 0.5*(nx - 2) + 2.0 + diameter + width/2;
00158   xc2 = 0.5*(nx - 2) + 2.0 - diameter - width/2;
00159   theta = (height + width/2.)/diameter;
00160 
00161   in->n = nx*5 + 1;
00162   in->x = (real *)malloc(in->n * sizeof(real));
00163   in->y = (real *)malloc(in->n * sizeof(real));
00164   in->t = (real *)malloc(in->n * sizeof(real));
00165   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00166   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00167   in->p = (real *)malloc(in->n * sizeof(real));
00168   
00169   for (i = 0; i < (in->n - 1)/2; i++) {
00170     tpi = (PI - theta)*i/((in->n - 1)/2 - 1);
00171     r = diameter*(1. + eps*sphericalY(mode, 0, tpi));
00172     in->x[i] = xc1 + r*cos(tpi);
00173     in->y[i] = YMIN + r*sin(tpi);
00174   }
00175   in->x[(in->n - 1)/2] = nx/2 + 1;
00176   in->y[(in->n - 1)/2] = YMIN + height;
00177   for (i = (in->n - 1)/2 + 1; i < in->n; i++) {
00178     tpi = theta + (PI - theta)*(i - (in->n - 1)/2 - 1)/((in->n - 3)/2);
00179     r = diameter*(1. + eps*sphericalY(mode, 0, tpi));
00180     in->x[i] = xc2 + r*cos(tpi);
00181     in->y[i] = YMIN + r*sin(tpi);
00182   }
00183   in->bc = AXITRUE;
00184 }
00185 
00186 
00187 void ini_impact(interface *in, real2D u, real2D v, real xvel, real tau,
00188                 int nx, int ny)
00189 {
00190   real h, tpi, r;
00191   real diameter = 0.2, thickness = 0.3, xc1, xc2;
00192   int i, j;
00193   real width = 2.0, height = 4.0, theta;
00194   
00195   h = 1.0 / (nx - 2);
00196 
00197   realreadSI("diameter", &diameter, stdin);
00198   realreadSI("thickness", &thickness, stdin);
00199   
00200   printf("------- Initialisation parameters ------\n");
00201   printf("Impact: D=%g thickness=%g xvel=%g\n", diameter, thickness, xvel);
00202     
00203   diameter *= 0.5 * (nx - 2);
00204   printf("radius: %f\n", diameter);
00205   xc1 = thickness*(nx - 2) + 2.0 + diameter + width/2;
00206   xc2 = thickness*(nx - 2) + 2.0 - diameter - width/2;
00207   theta = (height + width/2.)/diameter;
00208 
00209 #if 0
00210   for (i = 2; i < nx; i++)
00211     for (j = 2; j < ny; j++) {
00212       r = sqrt(sq((real)i - xc1) + sq((real)j - 1.5));
00213       if (r <= diameter)
00214         u[i][j] = xvel*tau/h;
00215     }
00216 #else
00217   for (i = 2 /* xc1 - diameter */ ; i < nx; i++)
00218     for (j = 2; j < ny; j++)
00219         u[i][j] = xvel*tau/h;
00220 #endif
00221 
00222   in->n = nx*5 + 1;
00223   in->x = (real *)malloc(in->n * sizeof(real));
00224   in->y = (real *)malloc(in->n * sizeof(real));
00225   in->t = (real *)malloc(in->n * sizeof(real));
00226   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00227   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00228   in->p = (real *)malloc(in->n * sizeof(real));
00229   
00230   for (i = 0; i < (in->n - 1)/2; i++) {
00231     tpi = (PI - theta)*i/((in->n - 1)/2 - 1);
00232     in->x[i] = xc1 + diameter*cos(tpi);
00233     in->y[i] = YMIN + diameter*sin(tpi);
00234   }
00235   in->x[(in->n - 1)/2] = (xc1 + xc2)/2.;
00236   in->y[(in->n - 1)/2] = YMIN + height;
00237   for (i = (in->n - 1)/2 + 1; i < in->n; i++) {
00238     in->x[i] = xc2 + diameter;
00239     in->y[i] = YMIN + height + width/2. + (i - (in->n - 1)/2 - 1)*((real)ny - 2. - height - width/2.)/(real)(in->n - 2 - (in->n - 1)/2);
00240   }
00241   in->y[in->n - 1] = 0.001 + (real)ny;
00242   in->bc = AXIBOTH;
00243 #if 0
00244   for (i = 0; i < in->n/2; i++) {
00245     double tmp;
00246     tmp = in->x[i];
00247     in->x[i] = in->x[in->n - 1 - i];
00248     in->x[in->n - 1 - i] = tmp;
00249 
00250     tmp = in->y[i];
00251     in->y[i] = in->y[in->n - 1 - i];
00252     in->y[in->n - 1 - i] = tmp;
00253   }
00254 #endif
00255 #if 0  
00256   for (i=0; i<=in->n-1; i++)
00257           in->x[i] = (real)nx - in->x[i] + 0.05;
00258 #endif
00259 }
00260 
00261 
00262 void inifile(interface *in, int nx, int ny, char *file)
00263 {
00264   FILE *fptr = fopen(file, "rt");
00265   int i, n = 0;
00266   float x, y;
00267 
00268   if (!fptr) {
00269     fprintf(stderr, "inifile(): cannot open file `%s'\n", file);
00270     exit(1);
00271   }
00272   while (fscanf(fptr, "%f %f", &x, &y) == 2)
00273     n++;
00274   printf("------- Initialisation parameters ------\n");
00275   printf("File: %s, npoints: %d\n", file, n);
00276   in->n = n;
00277   in->x = (real *)malloc(in->n * sizeof(real));
00278   in->y = (real *)malloc(in->n * sizeof(real));
00279   in->t = (real *)malloc(in->n * sizeof(real));
00280   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00281   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00282   in->p = (real *)malloc(in->n * sizeof(real));
00283   
00284   rewind(fptr);
00285   for (i = 0; i < n; i++) {
00286     fscanf(fptr, "%f %f", &x, &y);
00287     in->x[i] = (real)(nx - 2)*x + 2.;
00288     in->y[i] = (real)(nx - 2)*y + YMIN;
00289   }
00290 /*cld*/  
00291   in->bc = AXIBOTH;
00292 /*cld*/
00293 /*in->bc = AXITRUE*/
00294   fclose(fptr);
00295 }
00296 
00297 
00298 static void inibub(interface *in,
00299                    real2D u, real2D v, real2D p, 
00300                    real sigma,
00301                    real tau, 
00302                    real xvel,
00303                    real po,
00304                    real xc, real diameter,
00305                    real eps, int mode,
00306                    int nx, int ny)
00307 {
00308   real h, r, tpi;
00309   int i, j;
00310   
00311   h = 1.0 / (nx - 2);
00312   
00313   printf("------- Initialisation parameters ------\n");
00314   printf("Bubble: C=(%g,0), d=%g, mode=%d, eps=%g\n", 
00315          xc, diameter, mode, eps);
00316     
00317   diameter *= 0.5 * (nx - 2);
00318   printf("radius: %f\n", diameter);
00319   sigma *= tau * tau / (h * h * h);
00320   po *= sq(tau/h);
00321   xc = xc*(nx - 2) + 2.0;
00322 
00323   for (i = 1; i <= nx; i++)
00324     for (j = 1; j <= ny; j++) { 
00325       /*
00326         u[i][j] = xvel*tau/h*(i - 0.5*(nx + 1))/(0.5*(nx + 1));
00327         v[i][j] = xvel*tau/h*(j - 0.5*(ny + 1))/(0.5*(nx + 1));
00328 
00329         r = sqrt(sq(i - xc) + sq(j - 1.5));
00330         u[i][j] = -sq(diameter/r)/r*((real)i - xc)*xvel*tau/h;
00331         r = sqrt(sq(i + 0.5 - xc) + sq(j - 2.0));
00332         v[i][j] = -sq(diameter/r)/r*((real)j - 2.0)*xvel*tau/h;
00333       */
00334       p[i][j] = - 2.*sigma/diameter; 
00335     }
00336   
00337   in->n = 10*nx;
00338   in->x = (real *)malloc(in->n * sizeof(real));
00339   in->y = (real *)malloc(in->n * sizeof(real));
00340   in->t = (real *)malloc(in->n * sizeof(real));
00341   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00342   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00343   in->p = (real *)malloc(in->n * sizeof(real));
00344   
00345   for (i = 0; i < in->n; i++) {
00346     tpi = PI*(in->n - 1 - i)/(in->n - 1);
00347     r = diameter*(1. + eps*sphericalY(mode, 0, tpi));
00348     in->x[i] = xc + r*cos(tpi);
00349     in->y[i] = YMIN + r*sin(tpi);
00350   }
00351   in->bc = AXITRUE;
00352 }
00353 
00354 
00355 void inibubble(interface **in,
00356                int *nin,
00357                real2D u, real2D v, real2D p, 
00358                real sigma,
00359                real tau, 
00360                real xvel,
00361                real po,
00362                int nx, int ny)
00363 {
00364   real diameter, xc, eps = 0.0;
00365   int mode = 1;
00366   
00367   diameter = 0.5; xc = 0.5;
00368 
00369   realreadSI("diameter", &diameter, stdin);
00370   realreadSI("xc", &xc, stdin);
00371   intread("mode", &mode, stdin);
00372   realreadSI("eps", &eps, stdin);
00373 
00374   *in = (interface *)malloc(sizeof(interface));
00375   *nin = 1;
00376 
00377   inibub(*in, u, v, p, sigma, tau, xvel, po, xc, diameter, eps, mode, nx, ny);
00378 }
00379 
00380 
00381 void iniwave(interface **in,
00382              int *nin,
00383              real2D u, real2D v, real2D p, 
00384              real tau, 
00385              real xvel,
00386              int nx, int ny)
00387 {
00388   real h, x, y, ampli = 0.1, wavenr = 1.0, position = 0.5;
00389   int i;
00390 
00391   realreadSI("amplitude", &ampli, stdin);
00392   realreadSI("wavenr", &wavenr, stdin);
00393   realreadSI("position", &position, stdin);
00394   printf("------- Initialisation parameters ------\n");
00395   printf("Wave: wavenr=%g amplitude=%g position=%g\n", 
00396          wavenr, ampli, position);
00397   
00398   ampli *= ny - 2;
00399   h = 1.0 / (nx - 2);
00400 
00401   *in = (interface *)malloc(sizeof(interface));
00402   *nin = 1;
00403   (*in)->n = 10*nx;
00404   (*in)->x = (real *)malloc((*in)->n * sizeof(real));
00405   (*in)->y = (real *)malloc((*in)->n * sizeof(real));
00406   (*in)->t = (real *)malloc((*in)->n * sizeof(real));
00407   (*in)->spx = (polynom3 *)malloc(((*in)->n - 1) * sizeof(polynom3));
00408   (*in)->spy = (polynom3 *)malloc(((*in)->n - 1) * sizeof(polynom3));
00409   (*in)->p = (real *)malloc((*in)->n * sizeof(real));
00410   
00411   for (i = 0; i < (*in)->n - 1; i++) {
00412     x = (real)i * (real)(nx - 2.0) / (real)((*in)->n - 1) + 2.1;
00413     y = ampli*cos((x - 2.0)*2.0*PI*wavenr/(real)(nx - 2.0)) 
00414       + position*ny + 1.501;
00415     (*in)->x[i] = x;
00416     (*in)->y[i] = y;
00417   }  
00418   (*in)->x[(*in)->n - 1] = (*in)->x[0] + nx - 2.0;
00419   (*in)->y[(*in)->n - 1] = (*in)->y[0];
00420 }
00421 
00422 
00423 void inirealwave(interface **in,
00424                  int *nin,
00425                  real2D u, real2D v, real2D p, 
00426                  real tau, 
00427                  real xvel,
00428                  int nx, int ny)
00429 {
00430   real h, x, y, ampli = 0.1, wavenr = 1.0;
00431   int i;
00432 
00433   realreadSI("amplitude", &ampli, stdin);
00434   realreadSI("wavenr", &wavenr, stdin);
00435   printf("------- Initialisation parameters ------\n");
00436   printf("Wave: wavenr=%g amplitude=%g\n", wavenr, ampli);
00437   
00438   ampli *= ny - 2;
00439   h = 1.0 / (nx - 2);
00440 
00441   *in = (interface *)malloc(sizeof(interface));
00442   *nin = 1;
00443   (*in)->n = 100;
00444   (*in)->x = (real *)malloc((*in)->n * sizeof(real));
00445   (*in)->y = (real *)malloc((*in)->n * sizeof(real));
00446   (*in)->t = (real *)malloc((*in)->n * sizeof(real));
00447   (*in)->spx = (polynom3 *)malloc(((*in)->n - 1) * sizeof(polynom3));
00448   (*in)->spy = (polynom3 *)malloc(((*in)->n - 1) * sizeof(polynom3));
00449   (*in)->p = (real *)malloc((*in)->n * sizeof(real));
00450   
00451   for (i = 0; i < (*in)->n - 1; i++) {
00452     x = i * (nx - 2.0) / (real)((*in)->n - 1) + 2.1;
00453     y = ampli*cos((x - 2.0)*2.0*PI*wavenr/(nx - 2.0)) + 0.5*ny + 1.001;
00454     (*in)->x[i] = x;
00455     (*in)->y[i] = y;
00456   }  
00457   (*in)->x[(*in)->n - 1] = (*in)->x[0] + nx - 2.0;
00458   (*in)->y[(*in)->n - 1] = (*in)->y[0];
00459 }
00460 
00461 
00462 void initorus(interface *in,
00463               real2D u, real2D v, real2D p, 
00464               real tau, 
00465               real xvel,
00466               int nx, int ny)
00467 {
00468   real h, r, tpi;
00469   real xc, yc, diameter, eps;
00470   int mode;
00471   int i, j;
00472   
00473   h = 1.0 / (nx - 2);
00474 
00475   realreadSI("diameter", &diameter, stdin);
00476   realreadSI("xc", &xc, stdin);
00477   realreadSI("yc", &yc, stdin);
00478   intread("mode", &mode, stdin);
00479   realreadSI("eps", &eps, stdin);
00480 
00481   printf("------- Initialisation parameters ------\n");
00482   printf("torus: C=(%g,%g), d=%g, mode=%d, eps=%g\n", 
00483          xc, yc, diameter, mode, eps);
00484   
00485   diameter *= 0.5 * (nx - 2);
00486   printf("radius: %f\n", diameter);
00487   xc = xc*(nx - 2) + 2.0;
00488   yc = yc*(ny - 2) + 2.0;
00489 
00490   in->n = 10*nx;
00491   in->x = (real *)malloc(in->n * sizeof(real));
00492   in->y = (real *)malloc(in->n * sizeof(real));
00493   in->t = (real *)malloc(in->n * sizeof(real));
00494   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00495   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00496   in->p = (real *)malloc(in->n * sizeof(real));
00497 
00498   for (i = 0; i < in->n; i++) {
00499     tpi = 2.*PI*(in->n - 1 - i)/(in->n - 1);
00500     r = diameter*(1. + eps*sphericalY(mode, 0, tpi));
00501     in->x[i] = xc + r*cos(tpi);
00502     in->y[i] = yc + r*sin(tpi);
00503   }
00504   in->x[in->n - 1] = in->x[0];
00505   in->y[in->n - 1] = in->y[0];
00506   in->bc = TRUE_PERIODIC;
00507 }
00508 
00509 
00510 void inijet(interface *in,
00511             real2D u, real2D v, real2D p, 
00512             real tau, 
00513             real xvel,
00514             int nx, int ny)
00515 {
00516   real h = 1.0/(nx - 2);
00517   int i, j;
00518 
00519   for (i = nx/3; i <= nx; i++)
00520     for (j = 2; j < 10; j++)
00521       u[i][j] = xvel*tau/h*sq(10 - j)/sq(8);
00522   
00523   in->n = 4;
00524   in->x = (real *)malloc(in->n * sizeof(real));
00525   in->y = (real *)malloc(in->n * sizeof(real));
00526   in->t = (real *)malloc(in->n * sizeof(real));
00527   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00528   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00529   in->p = (real *)malloc(in->n * sizeof(real));
00530 
00531   in->x[0] = (nx - 2)/4. + 2.2; in->y[0] = YMIN;
00532   in->x[1] = (nx - 2)/2. + 2.; in->y[1] = (ny - 2)/2. + 2.;
00533   in->x[2] = 3.*(nx - 2)/4. + 2.; in->y[2] = (ny - 2)/4. + 2.;
00534   in->x[3] = (nx - 2)/3. + 2.; in->y[3] = YMIN;
00535   in->bc = AXITRUE;
00536 }
00537 
00538 
00539 
00540 
00541 
00542 
00543 
00544 
00545 
00546 
00547 
00548 void ini_impact2(interface *in, real2D u, real2D v, real xvel, real tau,
00549                 int nx, int ny)
00550 {
00551   real h, tpi, r;
00552   real diameter = 0.2, thickness = 0.3, xc1, xc2;
00553   int i, j;
00554   real width = 4.0, height = 4.0, theta;
00555   
00556   h = 1.0 / (nx - 2);
00557 
00558   realreadSI("diameter", &diameter, stdin);
00559   realreadSI("thickness", &thickness, stdin);
00560   
00561   printf("------- Initialisation parameters ------\n");
00562   printf("Impact: D=%g thickness=%g xvel=%g\n", diameter, thickness, xvel);
00563     
00564   diameter *= 0.5 * (nx - 2);
00565   printf("radius: %f\n", diameter);
00566   xc1 = thickness*(nx - 2) + 2.0 + diameter + width/2;
00567   xc2 = thickness*(nx - 2) + 2.0 - diameter - width/2;
00568   theta = (height + width/2.)/diameter;
00569 
00570 #if 0
00571   for (i = 2; i < nx; i++)
00572     for (j = 2; j < ny; j++) {
00573       r = sqrt(sq((real)i - xc1) + sq((real)j - 1.5));
00574       if (r <= diameter)
00575         u[i][j] = xvel*tau/h;
00576     }
00577 #else
00578   for (i = 2 /* xc1 - diameter */ ; i < nx; i++)
00579     for (j = 2; j < ny; j++)
00580         u[i][j] = xvel*tau/h;
00581 #endif
00582 
00583   in->n = nx*5 + 1;
00584   in->x = (real *)malloc(in->n * sizeof(real));
00585   in->y = (real *)malloc(in->n * sizeof(real));
00586   in->t = (real *)malloc(in->n * sizeof(real));
00587   in->spx = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00588   in->spy = (polynom3 *)malloc((in->n - 1) * sizeof(polynom3));
00589   in->p = (real *)malloc(in->n * sizeof(real));
00590   
00591   for (i = 0; i < (in->n - 1)/2; i++) {
00592     tpi = (PI - theta)*i/((in->n - 1)/2 - 1);
00593     in->x[i] = xc1 + diameter*cos(tpi);
00594     in->y[i] = YMIN + diameter*sin(tpi);
00595   }
00596   in->x[(in->n - 1)/2] = (xc1 + xc2)/2.;
00597   in->y[(in->n - 1)/2] = YMIN + height;
00598   for (i = (in->n - 1)/2 + 1; i < in->n; i++) {
00599     in->x[i] = xc2 + diameter;
00600     in->y[i] = YMIN + height + width/2. + (i - (in->n - 1)/2 - 1)*((real)ny - 2. - height - width/2.)/(real)(in->n - 2 - (in->n - 1)/2);
00601   }
00602   in->y[in->n - 1] = 0.001 + (real)ny;
00603   in->bc = AXIBOTH;
00604 #if 0
00605   for (i = 0; i < in->n/2; i++) {
00606     double tmp;
00607     tmp = in->x[i];
00608     in->x[i] = in->x[in->n - 1 - i];
00609     in->x[in->n - 1 - i] = tmp;
00610 
00611     tmp = in->y[i];
00612     in->y[i] = in->y[in->n - 1 - i];
00613     in->y[in->n - 1 - i] = tmp;
00614   }
00615 #endif
00616 #if 1  
00617   for (i=0; i<=in->n-1; i++)
00618           in->x[i] = (real)nx - in->x[i] + 0.05;
00619 #endif
00620 }
00621 
00622 

Generated on Wed Feb 19 22:26:49 2003 for Markers by doxygen1.2.18