Changeset 1209


Ignore:
Timestamp:
07/01/09 17:49:07 (16 years ago)
Author:
Mathieu Morlighem
Message:

Added some routine needed for Stokes CM

Location:
issm/trunk/src/c
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Makefile.am

    r1189 r1209  
    574574                                        ./parallel/control.cpp\
    575575                                        ./parallel/control_core.cpp\
     576                                        ./parallel/ControlPrepareStokes.cpp\
    576577                                        ./parallel/objectivefunctionC.cpp\
    577578                                        ./parallel/GradJCompute.cpp\
  • issm/trunk/src/c/parallel/GradJCompute.cpp

    r1208 r1209  
    5757
    5858        _printf_("%s\n","      recover solution for this stiffness and right hand side:");
    59         diagnostic_core_nonlinear(&u_g,&K_ff0,&K_fs0,femmodel,inputs,analysis_type,sub_analysis_type);
     59        diagnostic_core_nonlinear(&u_g,&K_ff0,&K_fs0,femmodel,inputs,DiagnosticAnalysisEnum(),sub_analysis_type);
    6060        VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
    6161        inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
  • issm/trunk/src/c/parallel/ProcessResults.cpp

    r1046 r1209  
    101101        /*Recover femmodels first: */
    102102        if(analysis_type==DiagnosticAnalysisEnum()){
    103 
    104103                fem_dh=fems+0;
    105104                fem_dv=fems+1;
     
    116115
    117116        if(analysis_type==TransientAnalysisEnum()){
    118 
    119117                fem_dh=fems+0;
    120118                fem_dv=fems+1;
     
    144142
    145143        if(analysis_type==ControlAnalysisEnum()){
    146                 fem_dh=fems+0; //load u_g
     144                fem_dh=fems+0;
     145                fem_dv=fems+1;
     146                fem_ds=fems+2;
     147                fem_dhu=fems+3;
     148                fem_sl=fems+4;
    147149                fem_c=fems+0;  //load param_g
    148150
  • issm/trunk/src/c/parallel/control_core.cpp

    r1184 r1209  
    1515        /*fem models: */
    1616        FemModel* fem_dh=NULL;
     17        FemModel* fem_dv=NULL;
     18        FemModel* fem_dhu=NULL;
     19        FemModel* fem_ds=NULL;
     20        FemModel* fem_sl=NULL;
    1721
    1822        /*output: */
     
    5761        /*recover fem models: */
    5862        fem_dh=fems+0;
     63        fem_dv=fems+1;
     64        fem_ds=fems+2;
     65        fem_dhu=fems+3;
     66        fem_sl=fems+4;
    5967
    6068        //first recover parameters common to all solutions
     
    9199        fem_dh->parameters->DeleteObject((Object*)param);
    92100
     101        /*take care of Stokes: compute slope and get spc once for all*/
     102        if (isstokes){
     103                ControlPrepareStokes(fems,inputs);
     104        }
     105
    93106        /*Start looping: */
    94107        for(n=0;n<nsteps;n++){
     
    99112
    100113                /*Update parameters: */
    101                 UpdateFromInputsx(fem_dh->elements,fem_dh->nodes,fem_dh->loads, fem_dh->materials,inputs);
     114                if (isstokes){
     115                        UpdateFromInputsx(fem_ds->elements,fem_ds->nodes,fem_ds->loads, fem_ds->materials,inputs);
     116                }
     117                else{
     118                        UpdateFromInputsx(fem_dh->elements,fem_dh->nodes,fem_dh->loads, fem_dh->materials,inputs);
     119                }
    102120
    103121                _printf_("%s\n","      computing gradJ...");
    104                 grad_g=GradJCompute(inputs,fem_dh);
     122                if (isstokes){
     123                        grad_g=GradJCompute(inputs,fem_ds);
     124                }
     125                else{
     126                        grad_g=GradJCompute(inputs,fem_dh);
     127                }
    105128                _printf_("%s\n","      done.");
    106129
     
    113136
    114137                _printf_("%s\n","      optimizing along gradient direction...");
    115                 optargs.femmodel=fem_dh; optargs.param_g=param_g; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n;
     138                if (isstokes){
     139                        optargs.femmodel=fem_ds;
     140                }
     141                else{
     142                        optargs.femmodel=fem_dh;
     143                }
     144                optargs.param_g=param_g; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n;
    116145                optpars.xmin=0; optpars.xmax=1; optpars.tolerance=tolx; optpars.maxiter=(int)maxiter[n];
    117146                BrentSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs);
  • issm/trunk/src/c/parallel/objectivefunctionC.cpp

    r1208 r1209  
    7777
    7878        //Run diagnostic with updated parameters.
    79         diagnostic_core_nonlinear(&u_g,NULL,NULL,femmodel,inputs,analysis_type,sub_analysis_type);
     79        diagnostic_core_nonlinear(&u_g,NULL,NULL,femmodel,inputs,DiagnosticAnalysisEnum(),sub_analysis_type);
    8080        VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
    8181        inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
  • issm/trunk/src/c/parallel/parallel.h

    r1184 r1209  
    4040void WriteLockFile(char* filename);
    4141
     42void ControlPrepareStokes(FemModel* fems, ParameterInputs* inputs);
     43
    4244void CreateFemModel(FemModel* femmodel,ConstDataHandle MODEL,char* analysis_type,char* sub_analysis_type);
    4345//int BatchDebug(Mat* Kgg,Vec* pg,FemModel* femmodel,char* filename);
Note: See TracChangeset for help on using the changeset viewer.