Multilayer Vesicle - multilayer_vesicle.c

    static double
form_volume(double radius,
          double thick_shell,
          double thick_solvent,
          double fp_n_shells)
{
    int n_shells = (int)(fp_n_shells + 0.5);
    double R_N = radius + n_shells*(thick_shell+thick_solvent) - thick_solvent;
    return M_4PI_3*cube(R_N);
}

static double
multilayer_vesicle_kernel(double q,
          double radius,
          double thick_shell,
          double thick_solvent,
          double sld_solvent,
          double sld,
          int n_shells)
{
    //calculate with a loop, two shells at a time
    int ii = 0;
    double fval = 0.0;
    double voli = 0.0;
    const double sldi = sld_solvent-sld;

    do {
        double ri = radius + (double)ii*(thick_shell + thick_solvent);

        // layer 1
        voli = M_4PI_3*ri*ri*ri;
        fval += voli*sldi*sas_3j1x_x(ri*q);

        ri += thick_shell;

        // layer 2
        voli = M_4PI_3*ri*ri*ri;
        fval -= voli*sldi*sas_3j1x_x(ri*q);

        //do 2 layers at a time
        ii++;

    } while(ii <= n_shells-1);  //change to make 0 < n_shells < 2 correspond to
                               //unilamellar vesicles (C. Glinka, 11/24/03)

    return fval;  // Volume normalization happens in caller
}

static double
radius_effective(int mode, double radius, double thick_shell, double thick_solvent, double fp_n_shells)
{
    // case 1: outer radius
    return radius + fp_n_shells*thick_shell + (fp_n_shells - 1.0)*thick_solvent;
}

static void
Fq(double q,
          double *F1,
          double *F2,
          double volfraction,
          double radius,
          double thick_shell,
          double thick_solvent,
          double sld_solvent,
          double sld,
          double fp_n_shells)
{
    int n_shells = (int)(fp_n_shells + 0.5);
    const double fq = multilayer_vesicle_kernel(q,
           radius,
           thick_shell,
           thick_solvent,
           sld_solvent,
           sld,
           n_shells);
    // See comment in vesicle.c regarding volfraction normalization.
    *F1 = 1.0e-2 * sqrt(volfraction)*fq;
    *F2 = 1.0e-4 * volfraction*fq*fq;
}


Back to Model Download