Changeset 16422


Ignore:
Timestamp:
10/16/13 08:20:15 (11 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixing InputUpdateFromSolutionFS bug, in which we do not transform the solution vector correctly

Location:
issm/trunk-jpl/src/c/classes/Elements
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16388 r16422  
    1069310693
    1069410694        /*Initialize values*/
    10695         IssmDouble* vvalues  = xNew<IssmDouble>(vnumdof);
    10696         IssmDouble* pvalues  = xNew<IssmDouble>(pnumdof);
     10695        IssmDouble* values   = xNew<IssmDouble>(vnumdof+pnumdof);
    1069710696        IssmDouble* vx       = xNew<IssmDouble>(vnumnodes);
    1069810697        IssmDouble* vy       = xNew<IssmDouble>(vnumnodes);
     
    1070110700        IssmDouble* pressure = xNew<IssmDouble>(pnumnodes);
    1070210701
     10702        /*Prepare coordinate system list*/
     10703        int* cs_list = xNew<int>(vnumnodes+pnumnodes);
     10704        for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
     10705        for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
     10706
    1070310707        /*Get dof list: */
    1070410708        GetDofListVelocity(&vdoflist,GsetEnum);
     
    1070610710
    1070710711        /*Use the dof list to index into the solution vector: */
    10708         for(i=0;i<vnumdof;i++) vvalues[i]=solution[vdoflist[i]];
    10709         for(i=0;i<pnumdof;i++) pvalues[i]=solution[pdoflist[i]];
     10712        for(i=0;i<vnumdof;i++) values[i]        =solution[vdoflist[i]];
     10713        for(i=0;i<pnumdof;i++) values[vnumdof+i]=solution[pdoflist[i]];
    1071010714
    1071110715        /*Transform solution in Cartesian Space*/
    10712         TransformSolutionCoord(&vvalues[0],nodes,vnumnodes,XYZEnum);
     10716        TransformSolutionCoord(&values[0],nodes,vnumnodes+pnumdof,cs_list);
    1071310717
    1071410718        /*Ok, we have vx and vy in values, fill in all arrays: */
    1071510719        for(i=0;i<vnumnodes;i++){
    10716                 vx[i] = vvalues[i*NDOF3+0];
    10717                 vy[i] = vvalues[i*NDOF3+1];
    10718                 vz[i] = vvalues[i*NDOF3+2];
     10720                vx[i] = values[i*NDOF3+0];
     10721                vy[i] = values[i*NDOF3+1];
     10722                vz[i] = values[i*NDOF3+2];
    1071910723                if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
    1072010724                if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
     
    1072210726        }
    1072310727        for(i=0;i<pnumnodes;i++){
    10724                 pressure[i] = pvalues[i];
     10728                pressure[i] = values[vnumdof+i];
    1072510729                if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
    1072610730        }
     
    1072810732        /*Recondition pressure and compute vel: */
    1072910733        this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    10730         for(i=0;i<pnumnodes;i++) pressure[i]=pressure[i]*FSreconditioning;
    10731         for(i=0;i<vnumnodes;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
     10734        for(i = 0;i<pnumnodes;i++) pressure[i] = pressure[i]*FSreconditioning;
     10735        for(i = 0;i<vnumnodes;i++) vel[i]      = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
    1073210736
    1073310737        /*Now, we have to move the previous inputs  to old
     
    1075110755        xDelete<IssmDouble>(vy);
    1075210756        xDelete<IssmDouble>(vx);
    10753         xDelete<IssmDouble>(vvalues);
    10754         xDelete<IssmDouble>(pvalues);
     10757        xDelete<IssmDouble>(values);
    1075510758        xDelete<int>(vdoflist);
    1075610759        xDelete<int>(pdoflist);
     10760        xDelete<int>(cs_list);
    1075710761}
    1075810762/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16421 r16422  
    44174417        GetDofListPressure(&pdoflist,GsetEnum);
    44184418
     4419        /*Use the dof list to index into the solution vector: */
    44194420        for(i=0;i<vnumdof;i++) values[i]        =solution[vdoflist[i]];
    44204421        for(i=0;i<pnumdof;i++) values[vnumdof+i]=solution[pdoflist[i]];
Note: See TracChangeset for help on using the changeset viewer.