Trisurf Monte Carlo simulator
Samo Penic
2014-03-05 719c9febac2eaff9483fda487b57684afbb59bb2
src/sh.c
@@ -9,7 +9,7 @@
    ts_uint j,i;
    ts_spharm *sph=(ts_spharm *)malloc(sizeof(ts_spharm));
    sph->N=0;
    /* lets initialize Ylm for each vertex. */
    sph->Ylmi=(ts_double ***)calloc(l,sizeof(ts_double **));
    for(i=0;i<l;i++){
@@ -25,6 +25,11 @@
        sph->ulm[j]=(ts_double *)calloc(2*j+1,sizeof(ts_double));
    }
    /* lets initialize sum of Ulm2 */
    sph->sumUlm2=(ts_double **)calloc(l,sizeof(ts_double *));
    for(j=0;j<l;j++){
        sph->sumUlm2[j]=(ts_double *)calloc(2*j+1,sizeof(ts_double));
    }
    /* lets initialize co */
//NOTE: C is has zero based indexing. Code is imported from fortran and to comply with original indexes we actually generate one index more. Also second dimension is 2*j+2 instead of 2*j+2. elements starting with 0 are useles and should be ignored!
@@ -46,6 +51,7 @@
    int i,j;
    for(i=0;i<sph->l;i++){
        if(sph->ulm[i]!=NULL) free(sph->ulm[i]);
        if(sph->sumUlm2[i]!=NULL) free(sph->sumUlm2[i]);
        if(sph->co[i]!=NULL) free(sph->co[i]);
    }
        if(sph->co[sph->l]!=NULL) free(sph->co[sph->l]);
@@ -232,6 +238,7 @@
ts_bool preparationSh(ts_vesicle *vesicle, ts_double r0){
//TODO: before calling or during the call calculate area of each triangle! Can
//be also done after vertexmove and bondflip //
//DONE: in energy calculation! //
    ts_uint i,j;
    ts_vertex **vtx=vesicle->vlist->vtx;
    ts_vertex *cvtx;
@@ -336,7 +343,7 @@
    ts_uint i,j,k;
    ts_vertex *cvtx;
    for(i=0;i<vesicle->sphHarmonics->l;i++){
        for(j=0;j<2*i;j++) vesicle->sphHarmonics->ulm[i][j]=0.0;
        for(j=0;j<2*i+1;j++) vesicle->sphHarmonics->ulm[i][j]=0.0;
    }
//TODO: call calculateYlmi !!!
@@ -354,3 +361,21 @@
    return TS_SUCCESS;
}
ts_bool storeUlm2(ts_vesicle *vesicle){
ts_spharm *sph=vesicle->sphHarmonics;
ts_int i,j;
for(i=0;i<sph->l;i++){
    for(j=0;j<2*i+1;j++){
   /* DEBUG fprintf(stderr,"sph->sumUlm2[%d][%d]=%e\n",i,j,sph->ulm[i][j]* sph->ulm[i][j]); */
        sph->sumUlm2[i][j]+=sph->ulm[i][j]* sph->ulm[i][j];
    }
}
   sph->N++;
return TS_SUCCESS;
}