Changeset 11327


Ignore:
Timestamp:
02/06/12 08:50:20 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added penalties in Newton's method

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp

    r11322 r11327  
    1010#include "../../EnumDefinitions/EnumDefinitions.h"
    1111
    12 void CreateJacobianMatrixx(Mat* pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters){
     12void CreateJacobianMatrixx(Mat* pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,double kmax){
    1313       
    14         int      connectivity;
     14        int      i,connectivity;
    1515        int      numberofdofspernode;
    1616        int      fsize,configuration_type;
    1717        Element *element = NULL;
     18        Load    *load    = NULL;
    1819        Mat      Jff     = NULL;
    1920
     
    3132       
    3233        /*Create and assemble matrix*/
    33         for(int i=0;i<elements->Size();i++){
     34        for(i=0;i<elements->Size();i++){
    3435                element=(Element*)elements->GetObjectByOffset(i);
    3536                element->CreateJacobianMatrix(Jff);
     37        }
     38        for (i=0;i<loads->Size();i++){
     39                load=(Load*)loads->GetObjectByOffset(i);
     40                if(load->InAnalysis(configuration_type)) load->CreateJacobianMatrix(Jff);
     41                if(load->InAnalysis(configuration_type)) load->PenaltyCreateJacobianMatrix(Jff,kmax);
    3642        }
    3743        MatAssemblyBegin(Jff,MAT_FINAL_ASSEMBLY);
  • issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h

    r11322 r11327  
    1010
    1111/* local prototypes: */
    12 void CreateJacobianMatrixx(Mat* pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters);
     12void CreateJacobianMatrixx(Mat* pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,double kmax);
    1313
    1414#endif  /* _CREATEJACOBIANMATRIXX_H */
  • issm/trunk-jpl/src/c/objects/Loads/Icefront.h

    r10576 r11327  
    7676                void  CreateKMatrix(Mat Kff, Mat Kfs);
    7777                void  CreatePVector(Vec pf);
     78                void  CreateJacobianMatrix(Mat Jff){_error_("Not implemented yet");};
     79                void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax){_error_("Not implemented yet");};
    7880                void  PenaltyCreateKMatrix(Mat Kff, Mat kfs, double kmax);
    7981                void  PenaltyCreatePVector(Vec pf, double kmax);
  • issm/trunk-jpl/src/c/objects/Loads/Load.h

    r9002 r11327  
    2929                virtual void  CreateKMatrix(Mat Kff, Mat Kfs)=0;
    3030                virtual void  CreatePVector(Vec pf)=0;
     31                virtual void  CreateJacobianMatrix(Mat Jff)=0;
     32                virtual void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax)=0;
    3133                virtual void  PenaltyCreateKMatrix(Mat Kff, Mat Kfs, double kmax)=0;
    3234                virtual void  PenaltyCreatePVector(Vec pf, double kmax)=0;
  • issm/trunk-jpl/src/c/objects/Loads/Numericalflux.h

    r10576 r11327  
    7272                void  CreateKMatrix(Mat Kff, Mat Kfs);
    7373                void  CreatePVector(Vec pf);
     74                void  CreateJacobianMatrix(Mat Jff){_error_("Not implemented yet");};
     75                void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax){_error_("Not implemented yet");};
    7476                void  PenaltyCreateKMatrix(Mat Kff, Mat kfs, double kmax);
    7577                void  PenaltyCreatePVector(Vec pf, double kmax);
  • issm/trunk-jpl/src/c/objects/Loads/Pengrid.h

    r10576 r11327  
    7777                void  CreateKMatrix(Mat Kff, Mat Kfs);
    7878                void  CreatePVector(Vec pf);
     79                void  CreateJacobianMatrix(Mat Jff){_error_("Not implemented yet");};
     80                void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax){_error_("Not implemented yet");};
    7981                void  PenaltyCreateKMatrix(Mat Kff, Mat kfs, double kmax);
    8082                void  PenaltyCreatePVector(Vec pf, double kmax);
  • issm/trunk-jpl/src/c/objects/Loads/Penpair.cpp

    r11247 r11327  
    209209void  Penpair::CreatePVector(Vec pf){
    210210
     211        /*No loads applied, do nothing: */
     212        return;
     213
     214}
     215/*}}}1*/
     216/*FUNCTION Penpair::CreateJacobianMatrix{{{1*/
     217void  Penpair::CreateJacobianMatrix(Mat Jff){
     218        /*If you code this piece, don't forget that a penalty will be inactive if it is dealing with clone nodes*/
    211219        /*No loads applied, do nothing: */
    212220        return;
     
    244252        /*No loads applied, do nothing: */
    245253        return;
     254}
     255/*}}}1*/
     256/*FUNCTION Penpair::PenaltyCreateJacobianMatrix{{{1*/
     257void  Penpair::PenaltyCreateJacobianMatrix(Mat Jff,double kmax){
     258        this->PenaltyCreateKMatrix(Jff,NULL,kmax);
    246259}
    247260/*}}}1*/
  • issm/trunk-jpl/src/c/objects/Loads/Penpair.h

    r11247 r11327  
    6464                void  CreateKMatrix(Mat Kff, Mat Kfs);
    6565                void  CreatePVector(Vec pf);
    66                 void  PenaltyCreateKMatrix(Mat Kff, Mat kfs, double kmax);
     66                void  CreateJacobianMatrix(Mat Jff);
     67                void  PenaltyCreateKMatrix(Mat Kff,Mat Kfs,double kmax);
    6768                void  PenaltyCreatePVector(Vec pf, double kmax);
     69                void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax);
    6870                bool  InAnalysis(int analysis_type);
    6971                /*}}}*/
  • issm/trunk-jpl/src/c/objects/Loads/Riftfront.h

    r11294 r11327  
    8484                void  CreateKMatrix(Mat Kff, Mat Kfs);
    8585                void  CreatePVector(Vec pf);
     86                void  CreateJacobianMatrix(Mat Jff){_error_("Not implemented yet");};
     87                void  PenaltyCreateJacobianMatrix(Mat Jff,double kmax){_error_("Not implemented yet");};
    8688                void  PenaltyCreateKMatrix(Mat Kff, Mat kfs, double kmax);
    8789                void  PenaltyCreatePVector(Vec pf, double kmax);
  • issm/trunk-jpl/src/c/objects/Numerics/ElementMatrix.cpp

    r11322 r11327  
    251251        double* localvalues=NULL;
    252252
     253        /*If Kfs is not provided, call the other function*/
     254        if(!Kfs){
     255                this->AddToGlobal(Kff);
     256                return;
     257        }
     258
    253259        /*In debugging mode, check consistency (no NaN, and values not too big)*/
    254260        this->CheckConsistency();
     
    300306        double* localvalues=NULL;
    301307
     308        /*Check that Jff is not NULL*/
     309        _assert_(Jff);
     310
    302311        /*In debugging mode, check consistency (no NaN, and values not too big)*/
    303312        this->CheckConsistency();
  • issm/trunk-jpl/src/c/solvers/solver_newton.cpp

    r11324 r11327  
    1414
    1515        /*intermediary: */
     16        bool   converged;
     17        int    num_unstable_constraints;
     18        int    count;
     19        double kmax;
    1620        Mat Kff = NULL, Kfs    = NULL, Jff = NULL;
    1721        Vec ug  = NULL, old_ug = NULL;
     
    2024        Vec df  = NULL;
    2125        Vec ys  = NULL;
    22        
    23         bool converged;
    24         int num_unstable_constraints;
    25         int count;
    2626
    2727        /*parameters:*/
     
    6969
    7070                /*Prepare next iteration using Newton's method*/
    71                 CreateJacobianMatrixx(&Jff,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
    72                 SystemMatricesx(&Kff,NULL,&pf,NULL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
     71                SystemMatricesx(&Kff,NULL,&pf,NULL,&kmax,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
     72                CreateJacobianMatrixx(&Jff,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kmax);
    7373                CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
    7474                VecDuplicate(pf,&pJf);
     
    7878                Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters);
    7979                MatFree(&Jff);            VecFree(&pJf);
    80                 VecAXPY(uf,+1.,duf);      VecFree(&duf);
     80                VecAXPY(uf,1.,duf);      VecFree(&duf);
    8181                Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);VecFree(&ys);
    8282                InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
Note: See TracChangeset for help on using the changeset viewer.