Changeset 667


Ignore:
Timestamp:
06/01/09 11:06:10 (15 years ago)
Author:
Eric.Larour
Message:

Cores for all solutions. Modified output for control solution

Location:
issm/trunk/src/c
Files:
8 edited

Legend:

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

    r666 r667  
    546546                                        ./parallel/SpawnCore.cpp\
    547547                                        ./parallel/ProcessResults.cpp\
     548                                        ./parallel/prognostic_core.cpp\
    548549                                        ./parallel/qmu.cpp\
    549550                                        ./parallel/DakotaResponses.cpp\
    550                                         ./parallel/OutputResults.cpp
     551                                        ./parallel/OutputResults.cpp\
     552                                        ./parallel/OutputControl.cpp
    551553
    552554libpISSM_a_CXXFLAGS = -fPIC -D_PARALLEL_   -D_C_
  • issm/trunk/src/c/parallel/ProcessResults.cpp

    r659 r667  
    3333        DataSet* newresults=NULL;
    3434
    35         /*fem models: */
     35        /*fem diagnostic models: */
    3636        FemModel* fem_dh=NULL;
    3737        FemModel* fem_dv=NULL;
     
    3939        FemModel* fem_ds=NULL;
    4040        FemModel* fem_sl=NULL;
     41
     42        /*fem prognostic models: */
     43        FemModel* fem_p=NULL;
    4144
    4245        int ishutter;
     
    5760        double  yts;
    5861
     62        Vec     h_g=NULL;
     63        double* h_g_serial=NULL;
     64        double* thickness=NULL;
     65
    5966        int numberofnodes;
    6067
     
    8087        }
    8188
     89        if(analysis_type==PrognosticAnalysisEnum()){
     90                fem_p=fems+0;
     91        }
    8292       
    8393
     
    185195                        xfree((void**)&partition);
    186196                }
     197                else if(strcmp(result->GetFieldName(),"h_g")==0){
     198                        /*easy, h_g is of size numberofnodes, on 1 dof, just repartition: */
     199                        result->GetField(&h_g);
     200                        VecToMPISerial(&h_g_serial,h_g);
     201                        fem_p->parameters->FindParam((void*)&numberofnodes,"numberofnodes");
     202                        VecToMPISerial(&partition,fem_p->partition);
     203
     204                        thickness=(double*)xmalloc(numberofnodes*sizeof(double));
     205
     206                        for(i=0;i<numberofnodes;i++){
     207                                thickness[i]=h_g_serial[(int)partition[i]];
     208                        }
     209                       
     210                        /*Ok, add pressure to newresults: */
     211                        newresult=new Result(newresults->Size()+1,result->GetTime(),result->GetStep(),"thickness",thickness,numberofnodes);
     212                        newresults->AddObject(newresult);
     213
     214                        /*do some cleanup: */
     215                        xfree((void**)&h_g_serial);
     216                        xfree((void**)&partition);
     217                }
    187218        }
    188219
  • issm/trunk/src/c/parallel/control.cpp

    r643 r667  
    158158                        inputs->Add("fit",fit[n]);
    159159                        diagnostic_core_nonlinear(&u_g,NULL,NULL,&femmodel,inputs,analysis_type,sub_analysis_type);
    160                         //OutputControl(u_g,p_g,J,nsteps,femmodel.partition,outputfilename,femmodel.nodesets);
     160                        OutputControl(u_g,p_g,J,nsteps,&femmodel,outputfilename);
    161161                        _printf_("%s\n","      done.");
    162162                }
     
    179179       
    180180        _printf_("%s\n","      saving final results...");
    181         //OutputControl(u_g,p_g,J,nsteps,femmodel.partition,outputfilename,femmodel.nodesets);
     181        OutputControl(u_g,p_g,J,nsteps,&femmodel,outputfilename);
    182182        _printf_("%s\n","      done.");
    183183
     
    188188                       
    189189        _printf_("closing MPI and Petsc\n");
    190         MPI_Barrier(MPI_COMM_WORLD);
    191 
    192         /*Close MPI libraries: */
    193190        PetscFinalize();
    194191
  • issm/trunk/src/c/parallel/diagnostic_core.cpp

    r643 r667  
    44
    55#undef __FUNCT__
    6 #define __FUNCT__ "cielodiagnostic_core"
     6#define __FUNCT__ "diagnostic_core"
    77
    88#include "../toolkits/toolkits.h"
  • issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp

    r586 r667  
    44
    55#undef __FUNCT__
    6 #define __FUNCT__ "cielodiagnostic_core_nonlinear"
     6#define __FUNCT__ "diagnostic_core_nonlinear"
    77
    88#include "../toolkits/toolkits.h"
     
    161161        }
    162162
    163         //more output might be needed, when running in cielocontrol.c
     163        //more output might be needed, when running in control.c
    164164        if(pKff0){
    165165
  • issm/trunk/src/c/parallel/parallel.h

    r659 r667  
    1212
    1313void diagnostic_core(DataSet* results,FemModel* fems, ParameterInputs* inputs);
     14void prognostic_core(DataSet* results,FemModel* fems, ParameterInputs* inputs);
    1415
    1516void thermal_core(DataSet* results,FemModel* fems, ParameterInputs* inputs);
     
    3233//int ParameterUpdate(double* search_vector,int step, WorkspaceParams* workspaceparams,BatchParams* batchparams);
    3334void OutputResults(DataSet* results,char* filename);
     35void OutputControl(Vec u_g,double* p_g,double* J,int nsteps,FemModel* fem,char* outputfilename);
    3436void WriteLockFile(char* filename);
    3537
  • issm/trunk/src/c/parallel/prognostic.cpp

    r643 r667  
    2323        char* outputfilename=NULL;
    2424        char* lockname=NULL;
     25        char* qmuinname=NULL;
     26        char* qmuoutname=NULL;
     27        char* qmuerrname=NULL;
    2528        int   numberofnodes;
    2629        int waitonlock=0;
    2730
    2831        FemModel fem;
     32
    2933        Vec h_g=NULL;
    3034        Vec u_g=NULL;
     
    3438        double* accumulation_g=NULL;
    3539        double  dt;
     40        int     qmu_analysis;
     41
     42        /*Results: */
     43        DataSet* results=NULL;
    3644
    3745       
     
    5563        outputfilename=argv[3];
    5664        lockname=argv[4];
     65        qmuinname=argv[5];
     66        qmuoutname=argv[6];
     67        qmuerrname=argv[7];
    5768
    5869        /*Open handle to data on disk: */
     
    7081        fem.parameters->FindParam((void*)&numberofnodes,"numberofnodes");
    7182
    72         _printf_("depth averaging velocity...");
    73         u_g=SerialToVec(u_g_serial,numberofnodes*3); xfree((void**)&u_g_serial);//vx,vy and vz should be present at this point.
    74         VelocityDepthAveragex( u_g, fem.elements,fem.nodes, fem.loads, fem.materials);
    75 
    7683        _printf_("initialize inputs:\n");
    7784        inputs=new ParameterInputs;
    78         inputs->Add("velocity_average",u_g,3,numberofnodes);
     85        inputs->Add("velocity",u_g_serial,3,numberofnodes);
    7986        inputs->Add("thickness",h_g_initial,1,numberofnodes);
    8087        inputs->Add("melting",melting_g,1,numberofnodes);
     
    8289        inputs->Add("dt",dt);
    8390
    84         /*lighten up on parameters : to be done */
     91        /*are we running the solutoin sequence, or a qmu wrapper around it? : */
     92        fem.parameters->FindParam((void*)&qmu_analysis,"qmu_analysis");
     93        if(!qmu_analysis){
    8594
    86         _printf_("call computational core:\n");
    87         diagnostic_core_linear(&h_g,&fem,inputs,PrognosticAnalysisEnum(),NoneAnalysisEnum());
     95                /*run prognostic analysis: */
     96                _printf_("call computational core:\n");
     97                prognostic_core(results,&fem,inputs);
    8898
    89         _printf_("extrude computed thickness on all layers:\n");
    90         ThicknessExtrudex( h_g, fem.elements,fem.nodes, fem.loads, fem.materials);
     99        }
     100        else{
     101                /*run qmu analysis: */
     102                _printf_("calling qmu analysis on prognostic core:\n");
     103       
     104                #ifdef _HAVE_DAKOTA_
     105                qmu(qmuinname,qmuoutname,qmuerrname,&fem,inputs,PrognosticAnalysisEnum(),NoneAnalysisEnum());
     106                #else
     107                throw ErrorException(__FUNCT__," Dakota not present, cannot do qmu!");
     108                #endif
     109        }
    91110
     111
     112                _printf_("process results:\n");
     113        ProcessResults(&results,&fem,DiagnosticAnalysisEnum());
     114       
    92115        _printf_("write results to disk:\n");
    93         //OutputPrognostic(h_g,&fem,outputfilename);
     116        OutputResults(results,outputfilename);
    94117
    95118        _printf_("write lock file:\n");
     
    100123               
    101124        _printf_("closing MPI and Petsc\n");
    102         MPI_Barrier(MPI_COMM_WORLD);
    103 
    104         /*Close MPI libraries: */
    105125        PetscFinalize();
    106 
    107126
    108127        /*end module: */
  • issm/trunk/src/c/parallel/thermal.cpp

    r659 r667  
    2424        char* outputfilename=NULL;
    2525        char* lockname=NULL;
     26        char* qmuinname=NULL;
     27        char* qmuoutname=NULL;
     28        char* qmuerrname=NULL;
     29        int   qmu_analysis=0;
    2630        int   numberofnodes;
    2731
     
    5761        outputfilename=argv[3];
    5862        lockname=argv[4];
     63        qmuinname=argv[5];
     64        qmuoutname=argv[6];
     65        qmuerrname=argv[7];
    5966
    6067        /*Open handle to data on disk: */
     
    8996        femmodels[1].parameters->DeleteObject((Object*)param);
    9097
     98        /*are we running the solutoin sequence, or a qmu wrapper around it? : */
     99        femmodels[0].parameters->FindParam((void*)&qmu_analysis,"qmu_analysis");
     100        if(!qmu_analysis){
     101
     102                /*run thermal analysis: */
     103                _printf_("call computational core:\n");
     104                thermal_core(results,femmodels,inputs);
     105
     106        }
     107        else{
     108                /*run qmu analysis: */
     109                _printf_("calling qmu analysis on thermal core:\n");
    91110       
    92         _printf_("call computational core:\n");
    93         thermal_core(results,femmodels,inputs);
     111                #ifdef _HAVE_DAKOTA_
     112                qmu(qmuinname,qmuoutname,qmuerrname,&femmodels[0],inputs,ThermalAnalysisEnum(),NoneAnalysisEnum());
     113                #else
     114                throw ErrorException(__FUNCT__," Dakota not present, cannot do qmu!");
     115                #endif
     116        }
    94117
     118       
    95119        _printf_("process results:\n");
    96         ProcessResults(&results,&femmodels[0],ThermalAnalysisEnum());
    97 
     120        ProcessResults(&results,&femmodels[0],DiagnosticAnalysisEnum());
     121       
    98122        _printf_("write results to disk:\n");
    99123        OutputResults(results,outputfilename);
     
    107131               
    108132        _printf_("closing MPI and Petsc\n");
    109         MPI_Barrier(MPI_COMM_WORLD);
    110 
    111         /*Close MPI libraries: */
    112133        PetscFinalize();
    113134
Note: See TracChangeset for help on using the changeset viewer.