Changeset 26362


Ignore:
Timestamp:
07/26/21 14:15:53 (4 years ago)
Author:
Mathieu Morlighem
Message:

CHG: P0 controls now working in 3d

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

Legend:

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

    r26329 r26362  
    11871187        Element* basalelement;
    11881188
     1189        if(control_interp==P0Enum) _error_("cannot require regularization for P0 controls");
     1190
    11891191        /*Get basal element*/
    11901192        element->FindParam(&domaintype,DomainTypeEnum);
     
    13751377        /*Intermediaries*/
    13761378        int      domaintype;
     1379
     1380        if(control_interp==P0Enum) _error_("cannot require regularization for P0 controls");
    13771381
    13781382        /*Get basal element*/
     
    14401444        /*Intermediaries*/
    14411445        int      domaintype;
     1446        if(control_interp!=P1Enum) _error_("not implemented yet...");
    14421447
    14431448        /*Get basal element*/
     
    15021507        /*Intermediaries*/
    15031508        int      domaintype,dim;
     1509        if(control_interp!=P1Enum) _error_("not implemented yet...");
    15041510
    15051511        /*Get domaintype*/
     
    15791585        int      domaintype,dim;
    15801586        Element* basalelement;
     1587        if(control_interp!=P1Enum) _error_("not implemented yet...");
    15811588
    15821589        /*Get basal element*/
     
    16611668        /*return if floating (gradient is 0)*/
    16621669        if(element->IsAllFloating()) return;
     1670        if(control_interp==P0Enum) _error_("cannot require regularization for P0 controls");
    16631671
    16641672        /*Intermediaries*/
     
    17551763        if(element->IsAllFloating()) return;
    17561764        if(!element->IsOnBase()) return;
     1765        if(control_interp!=P1Enum) _error_("not implemented yet...");
    17571766
    17581767        /*Intermediaries*/
     
    19341943
    19351944                /*Build gradient vector (actually -dJ/dD): */
    1936                 for(int i=0;i<numvertices;i++){
    1937                         if(domaintype!=Domain2DverticalEnum) ge[i]+=-2.*drag*dalpha2dk*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i];
    1938                         else ge[i]+=-2.*drag*dalpha2dk*(lambda*vx)*Jdet*gauss->weight*basis[i];
    1939                         _assert_(!xIsNan<IssmDouble>(ge[i]));
    1940                 }
    1941         }
    1942         gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
     1945                if(control_interp==P1Enum){
     1946                        for(int i=0;i<numvertices;i++){
     1947                                if(domaintype!=Domain2DverticalEnum) ge[i]+=-2.*drag*dalpha2dk*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i];
     1948                                else ge[i]+=-2.*drag*dalpha2dk*(lambda*vx)*Jdet*gauss->weight*basis[i];
     1949                                _assert_(!xIsNan<IssmDouble>(ge[i]));
     1950                        }
     1951                }
     1952                else if(control_interp==P0Enum){
     1953                        if(domaintype!=Domain2DverticalEnum) ge[0]+=-2.*drag*dalpha2dk*((lambda*vx+mu*vy))*Jdet*gauss->weight;
     1954                        else ge[0]+=-2.*drag*dalpha2dk*(lambda*vx)*Jdet*gauss->weight;
     1955                        _assert_(!xIsNan<IssmDouble>(ge[0]));
     1956                }
     1957                else{
     1958                        _error_("not supported");
     1959                }
     1960        }
     1961        if(control_interp==P1Enum){
     1962                gradient->SetValues(numvertices,vertexpidlist,ge,ADD_VAL);
     1963        }
     1964        else if(control_interp==P0Enum){
     1965                gradient->SetValue(vertexpidlist[0],ge[0],ADD_VAL);
     1966        }
     1967        else{
     1968                _error_("not supported");
     1969        }
    19431970
    19441971        /*Clean up and return*/
     
    20732100        if(element->IsAllFloating()) return;
    20742101        if(!element->IsOnBase()) return;
     2102        if(control_interp!=P1Enum) _error_("not implemented yet...");
    20752103
    20762104        /*Intermediaries*/
     
    21712199        if(element->IsAllFloating()) return;
    21722200        if(!element->IsOnBase()) return;
     2201        if(control_interp!=P1Enum) _error_("not implemented yet...");
    21732202
    21742203        /*Intermediaries*/
     
    22412270        /*return if floating (gradient is 0)*/
    22422271        if(element->IsAllFloating()) return;
     2272        if(control_interp!=P1Enum) _error_("not implemented yet...");
    22432273
    22442274        /*Intermediaries*/
     
    23662396        int      domaintype,dim;
    23672397        Element* basalelement;
     2398        if(control_interp!=P1Enum) _error_("not implemented yet...");
    23682399
    23692400        /*Get basal element*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r26329 r26362  
    220220        /*Call inputs method*/
    221221        switch(interpolation_enum){
     222                case P0Enum:
     223                        control_input->SetControl(interpolation_enum,1,&this->lid,values,values_min,values_max);
     224                        break;
    222225                case P1Enum:
    223226                        control_input->SetControl(interpolation_enum,NUMVERTICES,&vertexlids[0],values,values_min,values_max);
  • issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp

    r25508 r26362  
    177177                }
    178178        }
     179        else if(interp_in==P0Enum && this->interpolation==P0Enum){
     180                _assert_(this->N==1);
     181                for(int i=0;i<numindices;i++){
     182                        int row = indices[i];
     183                        _assert_(row>=0);
     184                        _assert_(row<this->M);
     185                        this->values[row] = values_in[i];
     186                }
     187        }
    179188        else if(this->interpolation!=P1Enum && interp_in==P1Enum){
    180189                this->Reset(interp_in);
Note: See TracChangeset for help on using the changeset viewer.