Changeset 618


Ignore:
Timestamp:
05/27/09 17:26:48 (16 years ago)
Author:
Mathieu Morlighem
Message:

do not compute Kgg_nopenalty each time if lowmem is not activated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/parallel/thermal_core.cpp

    r554 r618  
    1919
    2020        /*intermediary: */
     21        Mat Kgg_nopenalty=NULL;
    2122        Mat Kgg=NULL;
    2223        Mat Kff=NULL;
    2324        Mat Kfs=NULL;
     25        Vec pg_nopenalty=NULL;
    2426        Vec pg=NULL;
    2527        Vec pf=NULL;
     
    3638        char* solver_string=NULL;
    3739        int debug=0;
     40        int lowmem=0;
    3841
    3942        /*Recover parameters: */
     
    4548        fem->parameters->FindParam((void*)&solver_string,"solverstring");
    4649        fem->parameters->FindParam((void*)&debug,"debug");
     50        fem->parameters->FindParam((void*)&lowmem,"lowmem");
    4751        fem->parameters->FindParam((void*)&min_thermal_constraints,"min_thermal_constraints");
    4852
     
    5761
    5862                //*Generate system matrices
    59                 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type);
    60                 //apply penalties
    61                 PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,inputs,analysis_type,sub_analysis_type);
     63                if (!lowmem){
     64
     65                        /*Compute Kgg_nopenalty and pg_nopenalty once for all: */
     66                        if (count==1){
     67                                SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type);
     68                        }
     69
     70                        /*Copy K_gg_nopenalty into Kgg, same for pg: */
     71                        Kgg=(Mat)xmalloc(sizeof(Mat));
     72                        MatDuplicate(Kgg_nopenalty,MAT_COPY_VALUES,&Kgg);
     73                        pg=(Vec)xmalloc(sizeof(Vec));
     74                        VecDuplicate(pg_nopenalty,&pg);VecCopy(pg_nopenalty,pg);
     75
     76                        //apply penalties each time
     77                        PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,inputs,analysis_type,sub_analysis_type);
     78                }
     79                else{
     80                        SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type);
     81                        //apply penalties
     82                        PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,inputs,analysis_type,sub_analysis_type);
     83                }
    6284
    6385                /*!Reduce matrix from g to f size:*/
Note: See TracChangeset for help on using the changeset viewer.