Changeset 16754


Ignore:
Timestamp:
11/14/13 08:52:42 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: extending new InputUpdateFromSolution to FS 2d

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

Legend:

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

    r16684 r16754  
    9999}/*}}}*/
    100100void DamageEvolutionAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
    101         _error_("not implemented yet");
     101
     102        IssmDouble  max_damage;
     103        int                     *doflist = NULL;
     104
     105        /*Fetch number of nodes and dof for this finite element*/
     106        int numnodes = element->GetNumberOfNodes();
     107
     108        /*Fetch dof list and allocate solution vector*/
     109        element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
     110        IssmDouble* values    = xNew<IssmDouble>(numnodes);
     111
     112        /*Get user-supplied max_damage: */
     113        element->FindParam(&max_damage,DamageMaxDamageEnum);
     114
     115        /*Use the dof list to index into the solution vector: */
     116        for(int i=0;i<numnodes;i++){
     117                values[i]=solution[doflist[i]];
     118                /*Check solution*/
     119                if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
     120                /*Enforce D < max_damage and D > 0 */
     121                if(values[i]>max_damage) values[i]=max_damage;
     122                else if(values[i]<0.)    values[i]=0.;
     123        }
     124
     125        /*Get all inputs and parameters*/
     126        element->AddMaterialInput(DamageDbarEnum,values,P1Enum);
     127
     128        /*Free ressources:*/
     129        xDelete<IssmDouble>(values);
     130        xDelete<int>(doflist);
    102131}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp

    r16684 r16754  
    4141}/*}}}*/
    4242void ExtrudeFromBaseAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
    43         _error_("not implemented yet");
     43
     44        int inputenum;
     45        element->FindParam(&inputenum,InputToExtrudeEnum);
     46        element->InputUpdateFromSolutionOneDof(solution,inputenum);
    4447}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp

    r16717 r16754  
    6868                        element->InputUpdateFromSolutionOneDof(solution,inputenum);
    6969                        break;
     70                case Mesh2DverticalEnum:
     71                        element->InputUpdateFromSolutionOneDof(solution,inputenum);
     72                        break;
    7073                case Mesh3DEnum:
    7174                        element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum);
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16746 r16754  
    25472547void  Penta::InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type){
    25482548
    2549         const int numdof = NDOF1*NUMVERTICES;
    2550 
    2551         IssmDouble values[numdof];
    2552         int*   doflist=NULL;
    2553 
    2554         /*Get dof list: */
     2549        /*Intermediary*/
     2550        int* doflist = NULL;
     2551
     2552        /*Fetch number of nodes for this finite element*/
     2553        int numnodes = this->NumberofNodes();
     2554
     2555        /*Fetch dof list and allocate solution vector*/
    25552556        GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
     2557        IssmDouble* values    = xNew<IssmDouble>(numnodes);
    25562558
    25572559        /*Use the dof list to index into the solution vector: */
    2558         for(int i=0;i<numdof;i++){
     2560        for(int i=0;i<numnodes;i++){
    25592561                values[i]=solution[doflist[i]];
    25602562                if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
     
    25652567
    25662568        /*Free ressources:*/
     2569        xDelete<IssmDouble>(values);
    25672570        xDelete<int>(doflist);
    25682571}
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16740 r16754  
    13671367int Tria::GetNumberOfNodes(void){
    13681368        return this->NumberofNodes();
     1369}
     1370/*}}}*/
     1371/*FUNCTION Tria::GetNumberOfNodesPressure;{{{*/
     1372int Tria::GetNumberOfNodesPressure(void){
     1373        return this->NumberofNodesPressure();
     1374}
     1375/*}}}*/
     1376/*FUNCTION Tria::GetNumberOfNodesVelocity;{{{*/
     1377int Tria::GetNumberOfNodesVelocity(void){
     1378        return this->NumberofNodesVelocity();
    13691379}
    13701380/*}}}*/
     
    67816791}
    67826792/*}}}*/
    6783 
    67846793/*FUNCTION Tria::CreatEPLDomainMassMatrix {{{*/
    67856794ElementMatrix* Tria::CreateEPLDomainMassMatrix(void){
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16734 r16754  
    9090                void        GetNodesLidList(int* lidlist);
    9191                int         GetNumberOfNodes(void);
    92                 int         GetNumberOfNodesPressure(void){_error_("not implemented yet");};
    93                 int         GetNumberOfNodesVelocity(void){_error_("not implemented yet");};
     92                int         GetNumberOfNodesPressure(void);
     93                int         GetNumberOfNodesVelocity(void);
    9494                int         GetNumberOfVertices(void);
    9595                int         Sid();
Note: See TracChangeset for help on using the changeset viewer.