Changeset 2496


Ignore:
Timestamp:
10/22/09 15:53:48 (15 years ago)
Author:
Eric.Larour
Message:

Fixed nasty bug.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp

    r2333 r2496  
    2828        int i,j,k;
    2929        int ndof;
     30        int param_type;
    3031
    3132        /*processing of parameters: */
     
    4142        for(i=0;i<parameters->Size();i++){
    4243
    43                 Param* param=(Param*)parameters->GetObjectByOffset(i);
     44                param_type=parameters->GetEnum(i);
    4445
    45                 if (param->GetType()==DOUBLEVEC){
     46                if(param_type==ParamEnum()){
    4647
    47                         ndof=param->GetNdof();
     48                        Param* param=(Param*)parameters->GetObjectByOffset(i);
    4849
    49                         if (ndof!=0){ /*ok, we are dealing with a parameter that needs to be repartitioned, for ndof degrees of freedom: */
     50                        if (param->GetType()==DOUBLEVEC){
    5051
    51                                 new_parameter=(double*)xcalloc(numberofnodes*ndof,sizeof(double));
    52                                 param->GetParameterValue(&parameter);
     52                                ndof=param->GetNdof();
    5353
    54                                 for(j=0;j<ndof;j++){
     54                                if (ndof!=0){ /*ok, we are dealing with a parameter that needs to be repartitioned, for ndof degrees of freedom: */
    5555
    56                                         for(k=0;k<numberofnodes;k++){
    57                                        
    58                                                 new_parameter[(int)(ndof*partition[k]+j)]=parameter[ndof*k+j];
     56                                        new_parameter=(double*)xcalloc(numberofnodes*ndof,sizeof(double));
     57                                        param->GetParameterValue(&parameter);
     58
     59                                        for(j=0;j<ndof;j++){
     60
     61                                                for(k=0;k<numberofnodes;k++){
     62                                               
     63                                                        new_parameter[(int)(ndof*partition[k]+j)]=parameter[ndof*k+j];
     64
     65                                                }
    5966
    6067                                        }
     68                               
     69                                       
     70                                        /*Now, replace old parameter with new parameter: */
     71                                        param->SetDoubleVec(new_parameter,ndof*numberofnodes,ndof);
     72
     73                                        /*Free ressources: */
     74                                        xfree((void**)&new_parameter);
     75                                        xfree((void**)&parameter);
    6176
    6277                                }
    63                        
    64                                
    65                                 /*Now, replace old parameter with new parameter: */
    66                                 param->SetDoubleVec(new_parameter,ndof*numberofnodes,ndof);
    67 
    68                                 /*Free ressources: */
    69                                 xfree((void**)&new_parameter);
    70                                 xfree((void**)&parameter);
    71 
    7278                        }
    7379                }
Note: See TracChangeset for help on using the changeset viewer.