Changeset 20027


Ignore:
Timestamp:
01/29/16 18:48:16 (9 years ago)
Author:
Eric.Larour
Message:

CHG: speed up of the precompute sea level rise core by transposing the legendre polynomial values matrix.

Location:
issm/trunk-jpl/src/c
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp

    r20022 r20027  
    7575                /*compute legendre coefficient matrix:*/
    7676                legendre_coefficients=p_polynomial_value(M,nl-1,x);
    77                 parameters->AddObject(new DoubleMatParam(SealevelriseLegendreCoefficientsEnum,legendre_coefficients,nl,M));
     77                parameters->AddObject(new DoubleMatParam(SealevelriseLegendreCoefficientsEnum,legendre_coefficients,M,nl));
    7878
    7979                /*free ressources:*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r20023 r20027  
    35603560        if(legendre_precompute){
    35613561                DoubleMatParam* parameter = static_cast<DoubleMatParam*>(this->parameters->FindParamObject(SealevelriseLegendreCoefficientsEnum)); _assert_(parameter);
    3562                 parameter->GetParameterValueByPointer(&legendre_coefficients,NULL,&M);
     3562                parameter->GetParameterValueByPointer(&legendre_coefficients,&M,NULL);
    35633563        }
    35643564
     
    36483648                                if(legendre_precompute){
    36493649                                        int index=reCast<int,IssmDouble>((M-1)*(1-alpha/PI));
    3650                                         for(int n=0;n<nl;n++) G_elastic += deltalove[n]*legendre_coefficients[M*n + index];
     3650                                        for(int n=0;n<nl;n++) G_elastic += deltalove[n]*legendre_coefficients[index*nl+n];
    36513651                                }
    36523652                                else{
     
    38103810                if(legendre_precompute){
    38113811                        DoubleMatParam* parameter = static_cast<DoubleMatParam*>(this->parameters->FindParamObject(SealevelriseLegendreCoefficientsEnum)); _assert_(parameter);
    3812                         parameter->GetParameterValueByPointer(&legendre_coefficients,NULL,&M);
     3812                        parameter->GetParameterValueByPointer(&legendre_coefficients,&M,NULL);
    38133813                }
    38143814
     
    38533853                                if(legendre_precompute){
    38543854                                        int index=reCast<int,IssmDouble>((M-1)*(1-alpha/PI));
    3855                                         for(int n=0;n<nl;n++) G_elastic[i] += deltalove[n]*legendre_coefficients[M*n + index];
     3855                                        for(int n=0;n<nl;n++) G_elastic[i] += deltalove[n]*legendre_coefficients[index*nl+n];
    38563856                                }
    38573857                                else{
  • issm/trunk-jpl/src/c/shared/Numerics/legendre.cpp

    r20021 r20027  
    249249        v = xNew<IssmDouble>(m*(n+1));
    250250
    251         for ( i = 0; i < m; i++ ) v[i+0*m] = 1.0;
     251        for ( i = 0; i < m; i++ ) v[i*(n+1)+0] = 1.0;
    252252        if ( n < 1 ) return v;
    253253
    254         for ( i = 0; i < m; i++ ) v[i+1*m] = x[i];
    255 
    256         for ( j = 2; j <= n; j++ ) {
    257                 for ( i = 0; i < m; i++ ) {
    258                         v[i+j*m] = ( ( IssmDouble ) ( 2 * j - 1 ) * x[i] * v[i+(j-1)*m]
    259                                         - ( IssmDouble ) (     j - 1 ) *        v[i+(j-2)*m] )
     254        for ( i = 0; i < m; i++ ) v[i*(n+1)+1] = x[i];
     255
     256        for ( i = 0; i < m; i++ ) {
     257                for ( j = 2; j <= n; j++ ) {
     258                       
     259                        v[j+i*(n+1)] = ( ( IssmDouble ) ( 2 * j - 1 ) * x[i] * v[(j-1)+i*(n+1)]
     260                                        - ( IssmDouble ) (     j - 1 ) *        v[(j-2)+i*(n+1)] )
    260261                                / ( IssmDouble ) (     j     );
     262
    261263                }
    262264        }
Note: See TracChangeset for help on using the changeset viewer.