Changeset 2033


Ignore:
Timestamp:
08/27/09 17:15:17 (16 years ago)
Author:
seroussi
Message:

fixed control stedy, but stokes not working yet

Location:
issm/trunk/src/c/parallel
Files:
4 edited

Legend:

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

    r1881 r2033  
    6767        VecNorm(pf,NORM_2,&nF);
    6868        res=nKUoldF/nF;
    69         if (isnan(res)) throw ErrorException(__FUNCT__,exprintf("mechanical equilibrium convergence criterion is NaN! "));
     69        if (isnan(res)){
     70                PetscSynchronizedPrintf(MPI_COMM_WORLD,"norm nf %lf \n",nF);
     71                PetscSynchronizedFlush(MPI_COMM_WORLD);
     72
     73                PetscSynchronizedPrintf(MPI_COMM_WORLD,"norm kuold %lf \n",nKUoldF);
     74                PetscSynchronizedFlush(MPI_COMM_WORLD);
     75                throw ErrorException(__FUNCT__,exprintf("mechanical equilibrium convergence criterion is NaN! "));
     76        }
    7077
    7178        //clean up
     
    8996                VecDuplicate(old_uf,&duf);VecCopy(old_uf,duf); VecAYPX(duf,-1.0,uf);
    9097                VecNorm(duf,NORM_2,&ndu); VecNorm(old_uf,NORM_2,&nu);
     98
    9199                if (isnan(ndu) || isnan(nu)) throw ErrorException(__FUNCT__,exprintf("convergence criterion is NaN! "));
    92100
  • issm/trunk/src/c/parallel/gradjcompute_core.cpp

    r2015 r2033  
    2424        int sub_analysis_type;
    2525        int numberofnodes;
     26        int control_steady;
    2627        int numberofdofspernode;
    2728        char* solverstring=NULL;
     
    5455        femmodel->parameters->FindParam((void*)&analysis_type,"analysis_type");
    5556        femmodel->parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type");
     57        femmodel->parameters->FindParam((void*)&control_steady,"control_steady");
    5658        femmodel->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
    5759        femmodel->parameters->FindParam((void*)&numberofdofspernode,"numberofdofspernode");
     
    9597        }
    9698
    97         if(analysis_type==SteadystateAnalysisEnum()){
     99        if(control_steady){
    98100                diagnostic_results=new DataSet(ResultsEnum());
    99101                diagnostic_core(diagnostic_results,model, inputs);
  • issm/trunk/src/c/parallel/objectivefunctionC.cpp

    r2016 r2033  
    4141        int     analysis_type;
    4242        int     sub_analysis_type;
     43        int     control_steady;
    4344        Vec     u_g=NULL;
    4445        Vec     u_g_full=NULL;
     
    7172        femmodel->parameters->FindParam((void*)&analysis_type,"analysis_type");
    7273        femmodel->parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type");
     74        femmodel->parameters->FindParam((void*)&control_steady,"control_steady");
    7375        femmodel->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
    7476        femmodel->parameters->FindParam((void*)&numberofdofspernode,"numberofdofspernode");
     
    8890        inputs->Add(control_type,param_g_copy,1,numberofnodes);
    8991
    90         if (analysis_type==DiagnosticAnalysisEnum()){
     92        if (control_steady==0){
    9193                //Run diagnostic with updated parameters.
    9294                diagnostic_core_nonlinear(&u_g,NULL,NULL,NULL,femmodel,inputs,DiagnosticAnalysisEnum(),sub_analysis_type);
    9395                VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
     96                inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
    9497        }
    9598        else{
     
    102105                delete results_steadystate;
    103106
     107                VecToMPISerial(&u_g_double,u_g); VecFree(&u_g);
     108                if(!isstokes){
     109                        inputs->Add("velocity",u_g_double,3,numberofnodes);
     110                }
     111                else{
     112                        inputs->Add("velocity",u_g_double,4,numberofnodes);
     113                }
    104114                //extract the correct number of dofs (3 or 4)
    105                 VecDuplicatePatch(&u_g_full,u_g);VecFree(&u_g);
    106                 if(!isstokes){
    107                         xfree((void**)& dofset);dofset=dofsetgen(2,dofs01,3,numberofnodes*3); VecPartition(&u_g, u_g_full, dofset, numberofnodes*2);
    108                 }
    109                 VecFree(&u_g_full);
     115//              VecDuplicatePatch(&u_g_full,u_g);VecFree(&u_g);
     116//              if(!isstokes){
     117//                      xfree((void**)& dofset);
     118//                      dofset=dofsetgen(2,dofs01,3,numberofnodes*3);
     119//                      VecPartition(&u_g, u_g_full, dofset, numberofnodes*2);
     120//              }
     121//              VecFree(&u_g_full);
     122//              inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
    110123        }
    111 
    112         inputs->Add("velocity",u_g_double,numberofdofspernode,numberofnodes);
    113124
    114125        //Compute misfit for this velocity field.
  • issm/trunk/src/c/parallel/steadystate.cpp

    r2020 r2033  
    3030        /*Model: */
    3131        Model* model=NULL;
     32        FemModel* fem_dh=NULL;
     33        FemModel* fem_ds=NULL;
    3234
    3335        /*Results: */
     
    122124                }
    123125                else{
     126                        /*change control_steady to 1 to know we are doing steadystate*/
     127                        fem_dh=model->GetFormulation(DiagnosticAnalysisEnum(),HorizAnalysisEnum());
     128                        fem_ds=model->GetFormulation(DiagnosticAnalysisEnum(),StokesAnalysisEnum());
     129                        param=(Param*)fem_dh->parameters->FindParamObject("control_steady");
     130                        param->SetInteger(1);
     131                        param=(Param*)fem_ds->parameters->FindParamObject("control_steady");
     132                        param->SetInteger(1);
    124133                        /*run control analysis: */
    125134                        _printf_("call computational core:\n");
Note: See TracChangeset for help on using the changeset viewer.