Changeset 503


Ignore:
Timestamp:
05/19/09 15:38:40 (16 years ago)
Author:
Eric.Larour
Message:

Fixed all bugs for conduction, thermal steady solution

Location:
issm/trunk/src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/ConfigureObjectsx/ConfigureObjectsx.cpp

    r101 r503  
    2222       
    2323        /*intermediary: */
     24
    2425        elements->Configure(elements,loads,nodes,materials);
    2526        loads->Configure(elements,loads,nodes,materials);
  • issm/trunk/src/c/DataSet/DataSet.cpp

    r483 r503  
    11051105
    11061106                        pengrid=(Pengrid*)(*object);
     1107
    11071108                        pengrid->PenaltyConstrain(&unstable,inputs,analysis_type,sub_analysis_type);
    11081109
  • issm/trunk/src/c/ModelProcessorx/CreateDataSets.cpp

    r483 r503  
    7676                CreateConstraintsThermal(pconstraints,model,model_handle);
    7777                CreateLoadsThermal(ploads,model,model_handle);
     78                CreateParametersThermal(pparameters,model,model_handle);
    7879                                       
    7980        }
     
    8384                CreateConstraintsMelting(pconstraints,model,model_handle);
    8485                CreateLoadsMelting(ploads,model,model_handle);
     86                CreateParametersMelting(pparameters,model,model_handle);
    8587        }
    8688        else if (strcmp(model->analysis_type,"prognostic")==0){
  • issm/trunk/src/c/ModelProcessorx/Melting/CreateParametersMelting.cpp

    r483 r503  
    1 /*!\file: CreateParametersDiagnosticHoriz.cpp
     1/*!\file: CreateParametersMelting.cpp
    22 * \brief driver for creating parameters dataset, for diagnostic horiz analysis.
    33 */
    44
    55#undef __FUNCT__
    6 #define __FUNCT__ "CreateParametersDiagnosticHoriz"
     6#define __FUNCT__ "CreateParametersMelting"
    77
    88#include "../../DataSet/DataSet.h"
     
    1313#include "../Model.h"
    1414
    15 void CreateParametersDiagnosticHoriz(DataSet** pparameters,Model* model,ConstDataHandle model_handle){
     15void CreateParametersMelting(DataSet** pparameters,Model* model,ConstDataHandle model_handle){
    1616       
    1717        Param*   param = NULL;
  • issm/trunk/src/c/ModelProcessorx/Thermal/CreateParametersThermal.cpp

    r483 r503  
    1 /*!\file: CreateParametersDiagnosticHoriz.cpp
     1/*!\file: CreateParametersThermal.cpp
    22 * \brief driver for creating parameters dataset, for diagnostic horiz analysis.
    33 */
    44
    55#undef __FUNCT__
    6 #define __FUNCT__ "CreateParametersDiagnosticHoriz"
     6#define __FUNCT__ "CreateParametersThermal"
    77
    88#include "../../DataSet/DataSet.h"
     
    1313#include "../Model.h"
    1414
    15 void CreateParametersDiagnosticHoriz(DataSet** pparameters,Model* model,ConstDataHandle model_handle){
     15void CreateParametersThermal(DataSet** pparameters,Model* model,ConstDataHandle model_handle){
    1616       
    1717        Param*   param = NULL;
     
    2323        double* vy=NULL;
    2424        double* vz=NULL;
     25        double* pressure=NULL;
    2526
    2627        /*recover parameters : */
     
    6364        xfree((void**)&vz);
    6465       
     66        /*Get pressure: */
     67        ModelFetchData((void**)&pressure,NULL,NULL,model_handle,"pressure","Matrix","Mat");
     68       
     69        count++;
     70        param= new Param(count,"pressure",DOUBLEVEC);
     71        if(pressure) param->SetDoubleVec(pressure,model->numberofnodes);
     72        else param->SetDoubleVec(pressure,0);
     73        parameters->AddObject(param);
     74
     75        /*Free pressure: */
     76        xfree((void**)&pressure);
     77
     78       
    6579        /*Assign output pointer: */
    6680        *pparameters=parameters;
  • issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp

    r465 r503  
    2424        double* vy=NULL;
    2525        double* vz=NULL;
     26        double* pressure=NULL;
    2627       
    2728        double* u_g=NULL;
     
    5455
    5556       
    56         if (   (analysis_type==ControlAnalysisEnum()) ||  (analysis_type==DiagnosticAnalysisEnum())){
     57        if (   (analysis_type==ControlAnalysisEnum()) ||  (analysis_type==DiagnosticAnalysisEnum()) || (analysis_type==ThermalAnalysisEnum())){
    5758
    5859                parameters->FindParam((void*)&vx,"vx");
     
    141142        }
    142143
     144        if(analysis_type==ThermalAnalysisEnum()){
     145
     146                parameters->FindParam((void*)&pressure,"pressure");
     147               
     148                /*Now, from pressure, build p_g, correctly partitioned: */
     149                p_g=(double*)xcalloc(numberofnodes,sizeof(double));
     150
     151                for(i=0;i<numberofnodes;i++){
     152                        p_g[(int)(partition[i])]= pressure[i]; 
     153                }
     154
     155                /*Now, create new parameter: */
     156                count++;
     157                param= new Param(count,"p_g",DOUBLEVEC);
     158                param->SetDoubleVec(p_g,numberofnodes);
     159                parameters->AddObject(param);
     160
     161                /*erase old parameter: */
     162                param=(Param*)parameters->FindParamObject("pressure");
     163                parameters->DeleteObject((Object*)param);
     164        }
     165
    143166        xfree((void**)&partition);
    144167       
     
    150173        xfree((void**)&vx_obs);
    151174        xfree((void**)&vy_obs);
     175        xfree((void**)&pressure);
    152176        xfree((void**)&control_parameter);
    153177        xfree((void**)&u_g_obs);
  • issm/trunk/src/c/objects/Node.cpp

    r301 r503  
    444444        ParameterInputs* inputs=NULL;
    445445        Node* node=this;
    446         int* dof={0};
     446        int dof[1]={0};
    447447
    448448        /*Recover parameter inputs: */
  • issm/trunk/src/c/objects/Pengrid.cpp

    r498 r503  
    529529        double meltingpoint;
    530530        int    new_active;
    531         int* dofs1={0};
     531        int  dofs1[1]={0};
    532532        int  unstable=0;
    533533       
     
    569569                unstable=1;
    570570        }
    571        
     571
    572572        //Set penalty flag
    573573        active=new_active;
  • issm/trunk/src/c/objects/Penta.cpp

    r483 r503  
    35393539        double         vz_list[numgrids];
    35403540        double         vxvyvz_list[numgrids][3];
    3541         double         pressure_list[3];
    3542         double         pressure;
    35433541        double         temperature_list[numgrids];
    35443542        double         temperature;
     
    35993597        if(!found)throw ErrorException(__FUNCT__," could not find velocity in inputs!");
    36003598
    3601         found=inputs->Recover("dt",&dt);
    3602         if((!found) && (sub_analysis_type==TransientAnalysisEnum()))throw ErrorException(__FUNCT__," could not find dt in inputs!");
    3603        
    3604         found=inputs->Recover("pressure",&pressure_list[0],1,dofs1,numgrids,(void**)nodes);
    3605         if(!found)throw ErrorException(__FUNCT__," could not find pressure in inputs!");
    3606 
    3607         found=inputs->Recover("temperature",&temperature_list[0],1,dofs1,numgrids,(void**)nodes);
    3608         if(!found)throw ErrorException(__FUNCT__," could not find temperature in inputs!");
    3609 
     3599        if(sub_analysis_type==TransientAnalysisEnum()){
     3600                found=inputs->Recover("dt",&dt);
     3601                if(!found)throw ErrorException(__FUNCT__," could not find dt in inputs!");
     3602
     3603                found=inputs->Recover("temperature",&temperature_list[0],1,dofs1,numgrids,(void**)nodes);
     3604                if(!found)throw ErrorException(__FUNCT__," could not find temperature in inputs!");
     3605        }
     3606       
    36103607        for(i=0;i<numgrids;i++){
    36113608                vx_list[i]=vxvyvz_list[i][0];
     
    36623659                        /* Build transient now */
    36633660                        if(sub_analysis_type==TransientAnalysisEnum()){
     3661                                GetParameterValue(&temperature, &temperature_list[0],gauss_coord);
    36643662                                scalar_transient=temperature*Jdet*gauss_weight;
    36653663                                for(i=0;i<numgrids;i++){
     
    36763674        if(onbed && shelf){
    36773675
     3676
    36783677                tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria.
    36793678                tria->CreatePVectorThermalShelf(pg,inputs, analysis_type,sub_analysis_type);
    36803679                delete tria;
    3681                 return;
    36823680        }
    36833681
    36843682        /* Geothermal flux on ice sheet base and basal friction */
    36853683        if(onbed && !shelf){
    3686                
     3684
    36873685                tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria.
    36883686                tria->CreatePVectorThermalSheet(pg,inputs, analysis_type,sub_analysis_type);
    36893687                delete tria;
    3690                 return;
    36913688        }
    36923689
    36933690        cleanup_and_return:
    3694         xfree((void**)first_gauss_area_coord);
    3695         xfree((void**)second_gauss_area_coord);
    3696         xfree((void**)third_gauss_area_coord);
    3697         xfree((void**)vert_gauss_coord);
    3698         xfree((void**)area_gauss_weights);
    3699         xfree((void**)vert_gauss_weights);
     3691        xfree((void**)&first_gauss_area_coord);
     3692        xfree((void**)&second_gauss_area_coord);
     3693        xfree((void**)&third_gauss_area_coord);
     3694        xfree((void**)&vert_gauss_coord);
     3695        xfree((void**)&area_gauss_weights);
     3696        xfree((void**)&vert_gauss_weights);
     3697
    37003698}
    37013699
  • issm/trunk/src/c/objects/Tria.cpp

    r483 r503  
    25982598
    25992599        /*recover extra inputs from users, dt: */
    2600         inputs->Recover("dt",&dt);
     2600        found=inputs->Recover("dt",&dt);
    26012601        if(!found)throw ErrorException(__FUNCT__," could not find dt in inputs!");
    26022602
  • issm/trunk/src/m/solutions/cielo/thermal.m

    r472 r503  
    1919
    2020        %initialize inputs
    21         displaystring(debug,'\n%s',['setup inputs...']);
     21        displaystring(md.debug,'\n%s',['setup inputs...']);
    2222        inputs=inputlist;
    2323        inputs=add(inputs,'velocity',m_t.parameters.u_g,'doublevec',3,m_t.parameters.numberofnodes);
     
    2727        if strcmpi(md.sub_analysis_type,'steady'),
    2828       
    29                 displaystring(debug,'\n%s',['computing temperatures...']);
     29                displaystring(md.debug,'\n%s',['computing temperatures...']);
    3030                [t_g m_t.loads melting_offset]=thermal_core(m_t,inputs,'thermal','steady');
    3131               
    32                 displaystring(debug,'\n%s',['computing melting...']);
     32                displaystring(md.debug,'\n%s',['computing melting...']);
    3333                inputs=add(inputs,'melting_offset',melting_offset,'double');
    3434                inputs=add(inputs,'temperature',t_g,'doublevec',1,m_t.parameters.numberofnodes);
    3535                melting_g=diagnostic_core_linear(m_m,inputs,'melting','steady');
    3636               
    37                 displaystring(debug,'\n%s',['load results...']);
     37                displaystring(md.debug,'\n%s',['load results...']);
    3838                md.temperature=t_g;
    3939                md.melting=melting_g*md.yts; %from m/s to m/a
     
    5353                for n=1:nsteps,
    5454
    55                         displaystring(debug,'\n%s%i/%i\n','time step: ',n,nsteps);
     55                        displaystring(md.debug,'\n%s%i/%i\n','time step: ',n,nsteps);
    5656                       
    57                         displaystring(debug,'\n%s',['    computing temperatures...']);
     57                        displaystring(md.debug,'\n%s',['    computing temperatures...']);
    5858                        inputs=add(inputs,'temperature',soln(n).t_g,'doublevec',1,m_t.parameters.numberofnodes);
    5959                        [soln(n+1).t_g m_t.loads melting_offset]=thermal_core(m_t,inputs);
  • issm/trunk/src/m/solutions/cielo/thermal_core.m

    r472 r503  
    2626
    2727                %system matrices
    28                 [K_gg_ , p_g_]=SystemMatrices(m.elements,m.nodes,loads,m.materials,m.parameters,inputs);
    29                 [K_gg_ , p_g_]=SystemMatrices(K_gg,p_g,m.elements,m.nodes,loads,m.materials,m.parameters,inputs);
     28                displaystring(m.parameters.debug,'%s',['   system matrices']);
     29                [K_gg , p_g]=SystemMatrices(m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type);
     30                displaystring(m.parameters.debug,'%s',['   penalty system matrices']);
     31                [K_gg , p_g, melting_offset]=PenaltySystemMatrices(K_gg,p_g,m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type);
    3032
    3133                %Reduce tangent matrix from g size to f size
     
    3638
    3739                %Solve 
    38                 displaystring(m.parameters.debug,'\n%s',['   condition number of stiffness matrix: ',condest(K_ff)]);
     40                displaystring(m.parameters.debug,'%s',['   condition number of stiffness matrix: ',condest(K_ff)]);
    3941                [t_f]=Solver(K_ff,p_f,[],m.parameters);
    4042
    4143                %Merge back to g set
     44                displaystring(m.parameters.debug,'%s',['   merging solution back to g set']);
    4245                [t_g]= Mergesolutionfromftog( t_f, m.Gmn, m.ys, m.nodesets );
    4346
    4447                %Update inputs in datasets
    4548                inputs=add(inputs,'temperature',t_g,'doublevec',m.parameters.numberofdofspernode,m.parameters.numberofnodes);
     49                displaystring(m.parameters.debug,'%s',['   update inputs']);
    4650                [m.elements,m.nodes, loads,m.materials]=UpdateFromInputs(m.elements,m.nodes, loads,m.materials,inputs);
    4751       
    4852                %penalty constraints
    49                 [m.loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( m.elements,m.nodes, m.loads, m.materials,m.parameters,inputs);
     53                displaystring(m.parameters.debug,'%s',['   penalty constraints']);
     54                [m.loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( m.elements,m.nodes, m.loads, m.materials,m.parameters,inputs,analysis_type,sub_analysis_type);
    5055       
    5156                if ~converged,
    5257                        displaystring(m.parameters.debug,'\n%s%i','#unstable constraints ',num_unstable_constraints);
     58                        m.parameters.min_thermal_constraints
    5359                       
    54                         if num_unstable_constraints<m.parameters.min_thermal_constraints,
     60                        if num_unstable_constraints<=m.parameters.min_thermal_constraints,
    5561                                converged=1;
    5662                        end
  • issm/trunk/src/mex/PenaltyConstraints/PenaltyConstraints.cpp

    r465 r503  
    3636        FetchData((void**)&loads,NULL,NULL,LOADSIN,"DataSet",NULL);
    3737        FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL);
    38        
     38
    3939        /*parameters: */
    4040        FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL);
     
    7373{
    7474        _printf_("\n");
    75         _printf_("   usage: [loads, constraints_converged, num_unstable_constraints] = %s(elements,nodes,loads,materials,params,inputs);\n",__FUNCT__);
     75        _printf_("   usage: [loads, constraints_converged, num_unstable_constraints] = %s(elements,nodes,loads,materials,params,inputs,analysis_type,sub_analysis_type);\n",__FUNCT__);
    7676        _printf_("\n");
    7777}
  • issm/trunk/src/mex/PenaltySystemMatrices/PenaltySystemMatrices.cpp

    r472 r503  
    8181{
    8282        _printf_("\n");
    83         _printf_("   usage: [Kgg,pg] = %s(Kggin,pgin,eleemnts,nodes,loads,materials,params,inputs);\n",__FUNCT__);
     83        _printf_("   usage: [Kgg,pg] = %s(Kggin,pgin,eleemnts,nodes,loads,materials,params,inputs,analysis_type,sub_analysis_type);\n",__FUNCT__);
    8484        _printf_("\n");
    8585}
Note: See TracChangeset for help on using the changeset viewer.