Changeset 2016


Ignore:
Timestamp:
08/27/09 13:52:15 (16 years ago)
Author:
Eric.Larour
Message:

dofsetgen were leaking memory

Location:
issm/trunk/src/c/parallel
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/parallel/ControlInitialization.cpp

    r1881 r2016  
    5151        int dof012[3]={0,1,2};
    5252        int dof3[1]={3};
     53        double* dofset=NULL;
    5354
    5455        /*first recover parameters common to all solutions:*/
     
    113114        if(debug)_printf_("%s\n"," combining horizontal and vertical velocities...");
    114115        VecFree(&ug); ug=NewVec(numberofnodes*3);
    115         VecMerge(ug,ug_horiz,dofsetgen(2,&dof01[0],3,numberofnodes*3),numberofnodes*2);
    116         VecMerge(ug,ug_vert,dofsetgen(1,&dof2[0],3,numberofnodes*3),numberofnodes*1);
     116        xfree((void**)&dofset);dofset=dofsetgen(2,&dof01[0],3,numberofnodes*3); VecMerge(ug,ug_horiz,dofset,numberofnodes*2);
     117        xfree((void**)&dofset);dofset=dofsetgen(1,&dof2[0],3,numberofnodes*3); VecMerge(ug,ug_vert,dofset,numberofnodes*1);
    117118        VecFree(&ug_vert); VecFree(&ug_horiz);
    118119
     
    122123        VecScale(pg,1.0/stokesreconditioning);
    123124        ug_stokes=NewVec(fem_ds->nodesets->GetGSize());
    124         VecMerge(ug_stokes,ug,dofsetgen(3,dof012,4,numberofnodes*4),numberofnodes*3);
    125         VecMerge(ug_stokes,pg,dofsetgen(1,dof3,4,numberofnodes*4),numberofnodes);
     125        xfree((void**)&dofset);dofset=dofsetgen(3,dof012,4,numberofnodes*4); VecMerge(ug_stokes,ug,dofset,numberofnodes*3);
     126        xfree((void**)&dofset);dofset=dofsetgen(1,dof3,4,numberofnodes*4); VecMerge(ug_stokes,pg,dofset,numberofnodes);
    126127
    127128        //Add in inputs
     
    131132        //update spcs
    132133        if(debug)_printf_("%s\n"," update boundary conditions for stokes using velocities previously computed...");
    133         VecMerge(fem_ds->yg,ug,dofsetgen(3,dof012,4,numberofnodes*4),3*numberofnodes);
     134        xfree((void**)&dofset);dofset=dofsetgen(3,dof012,4,numberofnodes*4); VecMerge(fem_ds->yg,ug,dofset,3*numberofnodes);
     135       
    134136        VecFree(&fem_ds->ys); VecFree(&fem_ds->ys0);
    135137        Reducevectorgtosx(&fem_ds->ys,&fem_ds->ys0, fem_ds->yg,fem_ds->nodesets);
     
    147149        /*Assign output*/
    148150        model->SetActiveFormulation(fem_ds);
     151
     152        /*Free ressources:*/
     153        xfree((void**)&dofset);
     154
    149155}
  • issm/trunk/src/c/parallel/diagnostic_core.cpp

    r2003 r2016  
    179179               
    180180                        //decondition" pressure
    181                        
    182                         xfree((void**)&dofset);dofset=dofsetgen(1,dof3,4,numberofnodes*4);
    183                         VecFree(&pg);VecPartition(&pg, ug, dofset, numberofnodes*1);
     181                        VecFree(&pg);   
     182                        xfree((void**)&dofset);dofset=dofsetgen(1,dof3,4,numberofnodes*4); VecPartition(&pg, ug, dofset, numberofnodes*1);
    184183                        VecScale(pg,stokesreconditioning);
    185184                }
  • issm/trunk/src/c/parallel/objectivefunctionC.cpp

    r1972 r2016  
    5151        DataSet* results_steadystate=NULL;
    5252        int dofs01[2]={0,1};
     53        double* dofset=NULL;
    5354
    5455        /*Recover active model: */
     
    103104                //extract the correct number of dofs (3 or 4)
    104105                VecDuplicatePatch(&u_g_full,u_g);VecFree(&u_g);
    105                 if(!isstokes)VecPartition(&u_g, u_g_full, dofsetgen(2,dofs01,3,numberofnodes*3), numberofnodes*2);
     106                if(!isstokes){
     107                        xfree((void**)& dofset);dofset=dofsetgen(2,dofs01,3,numberofnodes*3); VecPartition(&u_g, u_g_full, dofset, numberofnodes*2);
     108                }
    106109                VecFree(&u_g_full);
    107110        }
     
    120123        xfree((void**)&param_g_copy);
    121124        xfree((void**)&u_g_double);
     125        xfree((void**)&dofset);
    122126
    123127        return J;
Note: See TracChangeset for help on using the changeset viewer.