Changeset 24157


Ignore:
Timestamp:
09/24/19 14:21:33 (5 years ago)
Author:
Eric.Larour
Message:

CHG: changes reqauired to run sea level solution update on Dakota + element partitioning update.

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

Legend:

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

    r24119 r24157  
    59465946                        break;
    59475947
     5948                case ElementEnum:
     5949                        IssmDouble value;
     5950                        /*Get value for the element: */
     5951                        value=vector[this->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
     5952                        this->inputs->AddInput(new TriaInput(name,&value,P0Enum));
     5953                        break;
    59485954                default:
    59495955                        _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
  • issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp

    r22617 r24157  
    1616
    1717        int     numberofvertices;
     18        int     numberofelements;
    1819        int     nrows;
    1920        int     ncols;
    2021        int     npart;
    2122        double *qmu_part  = NULL;
     23        int     qmu_npart;
    2224
    2325        double *distributed_values = NULL;
     
    2830        /*retrieve parameters: */
    2931        femmodel->parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
    30         femmodel->parameters->FindParam(&qmu_part,&dummy,QmuPartitionEnum);
     32        femmodel->parameters->FindParam(&qmu_part,&qmu_npart,QmuPartitionEnum);
    3133        numberofvertices=femmodel->vertices->NumberOfVertices();
     34        numberofelements=femmodel->elements->NumberOfElements();
    3235
    3336        /*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and
     
    5659                        femmodel->parameters->FindParamInDataset(&parameter,&nrows,&ncols,QmuVariableDescriptorsEnum,StringToEnumx(root));
    5760
    58                         /*We've got the parameter, we need to update it using qmu_part (a partitioning vector),
    59                          * and the distributed_values. Two cases: we either have a nrows=numberofvertices, in
    60                          * which case our parameter is a vector, or nrows=numberofvertices+1, in which case,
    61                          * our parameter is a transient vector. Deal with both cases accordingly: */
    62                         for(k=0;k<numberofvertices;k++){
    63                                 for(l=0;l<ncols;l++){
    64                                         *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)qmu_part[k]];
     61
     62                        /*We've got the parameter, we need to update it using qmu_part and the distributed_values.
     63                         * Several cases: we either have a nrows=numberofvertices or nrows=numberofelements, and
     64                         * in addition, it can be either a static or transient (nrows+1) vector.
     65                         * Deal with both cases accordingly: */
     66                        //_printf_("nrows: " << nrows << " numberofvertices: " << numberofvertices << " qmu_npart: " << qmu_npart << "\n");
     67
     68                        if (qmu_npart==numberofvertices){
     69                                for(k=0;k<numberofvertices;k++){
     70                                        for(l=0;l<ncols;l++){
     71                                                *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)qmu_part[k]];
     72                                        }
    6573                                }
    6674                        }
     75                        else if (qmu_npart==numberofelements){
     76                                for(k=0;k<numberofelements;k++){
     77                                        for(l=0;l<ncols;l++){
     78                                                *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)qmu_part[k]];
     79                                        }
     80                                }
     81
     82                        }
     83                        else _error_("partitioning vector should be either elements or vertex sized!");
    6784
    6885                        #ifdef _DEBUG_
     
    83100
    84101                        /*Update inputs using the parameter matrix: */
    85                         InputUpdateFromMatrixDakotax(femmodel, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
     102                        if(qmu_npart==numberofvertices)
     103                                InputUpdateFromMatrixDakotax(femmodel, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
     104                        else
     105                                InputUpdateFromMatrixDakotax(femmodel, parameter, nrows,ncols,StringToEnumx(root), ElementEnum);
    86106
    87107                        /*increment i to skip the distributed values just collected: */
  • issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp

    r23529 r24157  
    1111
    1212        int i;
    13         int numberofvertices;
     13        int numberofvertices,numberofelements;
    1414
    1515        numberofvertices=femmodel->vertices->NumberOfVertices();
     16        numberofelements=femmodel->elements->NumberOfElements();
    1617
    17         if((ncols==1) && (nrows==numberofvertices)) InputUpdateFromVectorDakotax(femmodel,matrix,name,type);
     18        if((ncols==1) && (nrows==numberofvertices | nrows==numberofelements)) InputUpdateFromVectorDakotax(femmodel,matrix,name,type);
    1819        else{
    1920
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp

    r23505 r24157  
    1515        int         *part                   = NULL;
    1616        double      *dpart                  = NULL;
     17        int          npart;
    1718        char       **responsedescriptors    = NULL;
    1819        int          numresponsedescriptors;
     
    6869                /*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
    6970                parameters->AddObject(iomodel->CopyConstantObject("md.qmu.numberofpartitions",QmuNumberofpartitionsEnum));
    70                 iomodel->FetchData(&dpart,NULL,NULL,"md.qmu.partition");
     71                iomodel->FetchData(&dpart,&npart,NULL,"md.qmu.partition");
    7172                if(!dpart) _error_("md.qmu.partition is empty");
    72                 parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,iomodel->numberofvertices));
     73                parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,npart));
    7374
    7475                /*Deal with data needed because of qmu variables*/
  • issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp

    r24145 r24157  
    163163                fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
    164164        }
     165        else if(strcmp(string_in,"SealevelriseDeltathickness")==0){
     166                const char* field = "md.slr.deltathickness";
     167                input_enum        = SealevelriseDeltathicknessEnum;
     168                fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
     169        }
    165170        else{
    166171                _error_("Field \""<<string_in<<"\" not supported yet");
Note: See TracChangeset for help on using the changeset viewer.