Changeset 548


Ignore:
Timestamp:
05/21/09 08:19:30 (16 years ago)
Author:
Mathieu Morlighem
Message:

missing parameters for thermal transient (initial temperature and pressure)

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

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/ModelProcessorx/Thermal/CreateParametersThermal.cpp

    r503 r548  
    2424        double* vz=NULL;
    2525        double* pressure=NULL;
     26        double* temperature=NULL;
     27        double* melting=NULL;
    2628
    2729        /*recover parameters : */
     
    3032        count=parameters->Size();
    3133
    32         /*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
    33         if (!model->ismacayealpattyn)return;
    34 
    35         /*Get vx and vy: */
     34        /*Get vx vy and vz: */
    3635        ModelFetchData((void**)&vx,NULL,NULL,model_handle,"vx","Matrix","Mat");
    3736        ModelFetchData((void**)&vy,NULL,NULL,model_handle,"vy","Matrix","Mat");
     
    7675        xfree((void**)&pressure);
    7776
     77        /* get initial temperature and melting if transient*/
     78        if(strcmp(model->sub_analysis_type,"transient")==0){
     79
     80                /*Get melting and temperature: */
     81                ModelFetchData((void**)&melting,NULL,NULL,model_handle,"melting","Matrix","Mat");
     82                if(melting) for(i=0;i<model->numberofnodes;i++)melting[i]=melting[i]/model->yts;   //m/s instead of m/yr
     83                ModelFetchData((void**)&temperature,NULL,NULL,model_handle,"temperature","Matrix","Mat");
     84
     85                count++;
     86                param= new Param(count,"melting",DOUBLEVEC);
     87                if(melting) param->SetDoubleVec(melting,model->numberofnodes);
     88                else param->SetDoubleVec(melting,0);
     89                parameters->AddObject(param);
     90
     91                count++;
     92                param= new Param(count,"temperature",DOUBLEVEC);
     93                if(temperature) param->SetDoubleVec(temperature,model->numberofnodes);
     94                else throw ErrorException(__FUNCT__,exprintf("Missing initial temperature"));
     95                parameters->AddObject(param);
     96
     97                /*Free melting and temperature: */
     98                xfree((void**)&melting);
     99                xfree((void**)&temperature);
     100        }
    78101       
    79102        /*Assign output pointer: */
    80103        *pparameters=parameters;
    81104}
    82 
    83        
  • issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp

    r503 r548  
    2424        double* vy=NULL;
    2525        double* vz=NULL;
     26       
     27        double* u_g=NULL;
     28
     29        /*thermal*/
    2630        double* pressure=NULL;
    27        
    28         double* u_g=NULL;
     31        double* temperature=NULL;
     32        double* melting=NULL;
     33
     34        double* p_g=NULL;
     35        double* t_g=NULL;
     36        double* melting_g=NULL;
    2937       
    3038        /*control: */
     
    3846
    3947        double* u_g_obs=NULL;
    40         double* p_g=NULL;
    41        
    4248
    4349        /*diverse: */
    4450        int     numberofnodes;
    4551        int     analysis_type;
     52        int     sub_analysis_type;
    4653        int     count;
    4754
    4855        parameters->FindParam((void*)&analysis_type,"analysis_type");
     56        parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type");
    4957        count=parameters->Size();
    5058               
     
    162170                param=(Param*)parameters->FindParamObject("pressure");
    163171                parameters->DeleteObject((Object*)param);
     172
     173                if(sub_analysis_type==TransientAnalysisEnum()){
     174
     175                        parameters->FindParam((void*)&temperature,"temperature");
     176                        parameters->FindParam((void*)&melting,"melting");
     177
     178                        /*Now, from temperature and melting, build t_g and melting_g, correctly partitioned: */
     179                        t_g=(double*)xcalloc(numberofnodes,sizeof(double));
     180                        melting_g=(double*)xcalloc(numberofnodes,sizeof(double));
     181
     182                        for(i=0;i<numberofnodes;i++){
     183                                t_g[(int)(partition[i])]=temperature[i];
     184                                melting_g[(int)(partition[i])]=melting[i];
     185                        }
     186
     187                        /*Now, create new parameter: */
     188                        count++;
     189                        param= new Param(count,"t_g",DOUBLEVEC);
     190                        param->SetDoubleVec(t_g,numberofnodes);
     191                        parameters->AddObject(param);
     192
     193                        count++;
     194                        param= new Param(count,"melting_g",DOUBLEVEC);
     195                        param->SetDoubleVec(melting_g,numberofnodes);
     196                        parameters->AddObject(param);
     197
     198                        /*erase old parameter: */
     199                        param=(Param*)parameters->FindParamObject("temperature");
     200                        parameters->DeleteObject((Object*)param);
     201
     202                        param=(Param*)parameters->FindParamObject("melting");
     203                        parameters->DeleteObject((Object*)param);
     204                }
    164205        }
    165206
     
    174215        xfree((void**)&vy_obs);
    175216        xfree((void**)&pressure);
     217        xfree((void**)&temperature);
     218        xfree((void**)&melting);
    176219        xfree((void**)&control_parameter);
    177220        xfree((void**)&u_g_obs);
    178221        xfree((void**)&p_g);
     222        xfree((void**)&t_g);
     223        xfree((void**)&melting_g);
    179224
    180225}
Note: See TracChangeset for help on using the changeset viewer.