Changeset 851
- Timestamp:
- 06/08/09 16:45:56 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/Makefile.am
r848 r851 224 224 ./UpdateGeometryx/UpdateGeometryx.h\ 225 225 ./UpdateGeometryx/UpdateGeometryx.cpp\ 226 ./UpdateNodePositionsx/UpdateNodePositionsx.h\ 227 ./UpdateNodePositionsx/UpdateNodePositionsx.cpp\ 226 228 ./ConfigureObjectsx/ConfigureObjectsx.h\ 227 229 ./ConfigureObjectsx/ConfigureObjectsx.cpp\ … … 492 494 ./UpdateGeometryx/UpdateGeometryx.h\ 493 495 ./UpdateGeometryx/UpdateGeometryx.cpp\ 496 ./UpdateNodePositionsx/UpdateNodePositionsx.h\ 497 ./UpdateNodePositionsx/UpdateNodePositionsx.cpp\ 494 498 ./ConfigureObjectsx/ConfigureObjectsx.h\ 495 499 ./ConfigureObjectsx/ConfigureObjectsx.cpp\ -
issm/trunk/src/c/parallel/transient_core.cpp
r823 r851 21 21 22 22 int dim=-1; 23 24 23 24 25 25 fem_p=fems+5; 26 26 -
issm/trunk/src/c/parallel/transient_core_2d.cpp
r850 r851 150 150 result=new Result(results->Size()+1,time,step,"b_g",b_g); results->AddObject(result); 151 151 } 152 153 /*Free ressources:*/ 154 xfree((void**)&u_g_serial); 155 xfree((void**)&p_g_serial); 156 xfree((void**)&h_g_serial); 157 xfree((void**)&s_g_serial); 158 xfree((void**)&b_g_serial); 152 159 } -
issm/trunk/src/c/parallel/transient_core_3d.cpp
r823 r851 4 4 5 5 #undef __FUNCT__ 6 #define __FUNCT__ "transient_ core_3d"6 #define __FUNCT__ "transient_3d_core" 7 7 8 8 #include "../toolkits/toolkits.h" … … 15 15 void transient_core_3d(DataSet* results,FemModel* fems, ParameterInputs* inputs){ 16 16 17 throw ErrorException(__FUNCT__," 3d transient not supported yet!"); 18 19 17 extern int my_rank; 18 19 /*fem models: */ 20 FemModel* fem_dh=NULL; 21 FemModel* fem_dv=NULL; 22 FemModel* fem_dhu=NULL; 23 FemModel* fem_ds=NULL; 24 FemModel* fem_sl=NULL; 25 FemModel* fem_p=NULL; 26 FemModel* fem_t=NULL; 27 FemModel* fem_m=NULL; 28 29 /*output: */ 30 Result* result=NULL; 31 32 /*solutions: */ 33 int step; 34 double time; 35 36 Vec u_g=NULL; 37 double* u_g_serial=NULL; 38 Vec p_g=NULL; 39 double* p_g_serial=NULL; 40 Vec h_g=NULL; 41 Vec h_g_intermediary=NULL; 42 double* h_g_serial=NULL; 43 Vec s_g=NULL; 44 double* s_g_serial=NULL; 45 Vec b_g=NULL; 46 double* b_g_serial=NULL; 47 Vec t_g=NULL; 48 Vec t_g_average=NULL; 49 double* t_g_serial=NULL; 50 Vec m_g=NULL; 51 double* m_g_serial=NULL; 52 53 /*intermediary: */ 54 double finaltime; 55 double dt; 56 double yts; 57 DataSet* temperature_results=NULL; 58 DataSet* diagnostic_results=NULL; 59 DataSet* prognostic_results=NULL; 60 61 62 /*flags: */ 63 int debug=0; 64 int numberofnodes; 65 66 /*dof recovery: */ 67 int dof01[2]={0,1}; 68 int dof2[1]={2}; 69 int dof012[3]={0,1,2}; 70 int dof3[1]={3}; 71 72 /*recover fem models: */ 73 fem_dh=fems+0; 74 fem_dv=fems+1; 75 fem_ds=fems+2; 76 fem_dhu=fems+3; 77 fem_sl=fems+4; 78 fem_p=fems+5; 79 80 fem_t=fems+6; 81 fem_m=fems+7; 82 83 //first recover parameters common to all solutions 84 fem_dh->parameters->FindParam((void*)&debug,"debug"); 85 fem_dh->parameters->FindParam((void*)&finaltime,"ndt"); 86 fem_dh->parameters->FindParam((void*)&dt,"dt"); 87 fem_dh->parameters->FindParam((void*)&yts,"yts"); 88 fem_dh->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 89 90 /*initialize: */ 91 step=1; 92 time=0; 93 94 fem_p->parameters->FindParam((void*)&u_g_serial,"u_g"); 95 u_g=SerialToVec(u_g_serial,2*numberofnodes); xfree((void**)&u_g_serial); 96 97 fem_p->parameters->FindParam((void*)&p_g_serial,"p_g"); 98 p_g=SerialToVec(p_g_serial,1*numberofnodes); xfree((void**)&p_g_serial); 99 100 fem_p->parameters->FindParam((void*)&h_g_serial,"h_g"); 101 h_g=SerialToVec(h_g_serial,1*numberofnodes); xfree((void**)&h_g_serial); 102 103 fem_p->parameters->FindParam((void*)&s_g_serial,"s_g"); 104 s_g=SerialToVec(s_g_serial,1*numberofnodes); xfree((void**)&s_g_serial); 105 106 fem_p->parameters->FindParam((void*)&b_g_serial,"b_g"); 107 b_g=SerialToVec(b_g_serial,1*numberofnodes); xfree((void**)&b_g_serial); 108 109 fem_p->parameters->FindParam((void*)&t_g_serial,"t_g"); 110 t_g=SerialToVec(t_g_serial,1*numberofnodes); xfree((void**)&t_g_serial); 111 112 fem_p->parameters->FindParam((void*)&m_g_serial,"m_g"); 113 m_g=SerialToVec(m_g_serial,1*numberofnodes); xfree((void**)&m_g_serial); 114 115 /*Add all these initial vectors in the results!: */ 116 result=new Result(results->Size()+1,time,step,"u_g",u_g); results->AddObject(result); 117 result=new Result(results->Size()+1,time,step,"p_g",p_g); results->AddObject(result); 118 result=new Result(results->Size()+1,time,step,"h_g",h_g); results->AddObject(result); 119 result=new Result(results->Size()+1,time,step,"s_g",s_g); results->AddObject(result); 120 result=new Result(results->Size()+1,time,step,"b_g",b_g); results->AddObject(result); 121 result=new Result(results->Size()+1,time,step,"t_g",t_g); results->AddObject(result); 122 result=new Result(results->Size()+1,time,step,"m_g",m_g); results->AddObject(result); 123 124 while(time<finaltime+dt){ //make sure we run up to finaltime. 125 126 if(debug)_printf_("%s%g%s%i%s%g\n","time [yr]: ",time/yts," iteration number: ",step,"/",floor(finaltime/dt)); 127 128 step+=1; 129 time+=dt; 130 131 //update inputs 132 inputs->Add("thickness",h_g,1,numberofnodes); 133 inputs->Add("surface",s_g,1,numberofnodes); 134 inputs->Add("bed",b_g,1,numberofnodes); 135 inputs->Add("velocity",u_g,2,numberofnodes); 136 inputs->Add("pressure",p_g,1,numberofnodes); 137 inputs->Add("temperature",t_g,1,numberofnodes); 138 139 //Deal with temperature first 140 if(debug)_printf_("%s\n","computing temperature"); 141 temperature_results=new DataSet(ResultsEnum()); 142 thermal_core(results,fems+6, inputs); 143 144 //extract t_g and m_g from thermal, and erase thermal results; 145 temperature_results->FindResult(&t_g,"t_g"); 146 temperature_results->FindResult(&m_g,"m_g"); 147 148 //Compute depth averaged temperature and add to inputs 149 if(debug)_printf_("%s\n","computing depth average temperature"); 150 VecDuplicatePatch(&t_g_average,t_g); 151 FieldDepthAveragex( t_g_average, fem_t->elements,fem_t->nodes, fem_t->loads, fem_t->materials,"temperature"); 152 inputs->Add("temperature_average",t_g_average,1,numberofnodes); 153 VecFree(&t_g_average); //not needed anymore 154 155 //Deal with velocities. 156 diagnostic_results=new DataSet(ResultsEnum()); 157 diagnostic_core(diagnostic_results,fems, inputs); 158 159 //extract u_g and p_g from diagnostic_results, and erase diagnostic_results; 160 diagnostic_results->FindResult(&u_g,"u_g"); 161 diagnostic_results->FindResult(&p_g,"p_g"); 162 delete diagnostic_results; 163 164 //compute new thickness 165 if(debug)_printf_("%s\n","computing new thickness"); 166 167 inputs->Add("velocity",u_g,2,numberofnodes); 168 prognostic_results=new DataSet(ResultsEnum()); prognostic_core(prognostic_results,fem_p, inputs); 169 170 //extract h_g prognostic_results, and erase prognostic_results; 171 prognostic_results->FindResult(&h_g_intermediary,"h_g"); 172 delete prognostic_results; 173 174 //update surface and bed using the new thickness 175 if(debug)_printf_(" updating geometry\n"); 176 UpdateGeometryx(&h_g,&b_g,&s_g, 177 fem_p->elements, fem_p->nodes,fem_p->loads, fem_p->materials, 178 h_g_intermediary,b_g,s_g); 179 VecFree(&h_g_intermediary); 180 181 if(debug)_printf_("%s\n","updating node positions"); 182 UpdateNodePositionsx( fem_dh->elements,fem_dh->nodes,fem_dh->loads,fem_dh->materials,h_g,b_g); 183 UpdateNodePositionsx( fem_dv->elements,fem_dv->nodes,fem_dv->loads,fem_dv->materials,h_g,b_g); 184 UpdateNodePositionsx( fem_ds->elements,fem_ds->nodes,fem_ds->loads,fem_ds->materials,h_g,b_g); 185 UpdateNodePositionsx( fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,h_g,b_g); 186 UpdateNodePositionsx( fem_p->elements,fem_p->nodes,fem_p->loads,fem_p->materials,h_g,b_g); 187 UpdateNodePositionsx( fem_p->elements,fem_p->nodes,fem_p->loads,fem_p->materials,h_g,b_g); 188 UpdateNodePositionsx( fem_t->elements,fem_t->nodes,fem_t->loads,fem_t->materials,h_g,b_g); 189 UpdateNodePositionsx( fem_m->elements,fem_m->nodes,fem_m->loads,fem_m->materials,h_g,b_g); 190 191 //plug into results. 192 result=new Result(results->Size()+1,time,step,"u_g",u_g); results->AddObject(result); 193 result=new Result(results->Size()+1,time,step,"p_g",p_g); results->AddObject(result); 194 result=new Result(results->Size()+1,time,step,"h_g",h_g); results->AddObject(result); 195 result=new Result(results->Size()+1,time,step,"s_g",s_g); results->AddObject(result); 196 result=new Result(results->Size()+1,time,step,"b_g",b_g); results->AddObject(result); 197 } 198 199 /*Free ressources:*/ 200 xfree((void**)&u_g_serial); 201 xfree((void**)&p_g_serial); 202 xfree((void**)&h_g_serial); 203 xfree((void**)&s_g_serial); 204 xfree((void**)&b_g_serial); 205 xfree((void**)&t_g_serial); 206 xfree((void**)&m_g_serial); 20 207 } -
issm/trunk/src/m/solutions/cielo/transient3d.m
r849 r851 115 115 %end 116 116 117 %update node s117 %update node positions 118 118 displaystring(md.debug,' updating node positions...')); 119 119 nodes_dh=UpdateNodePositions(m_dh.elements,m_dh.nodes,m_dh.loads,m_dh.materials,new_bed,new_thickness);
Note:
See TracChangeset
for help on using the changeset viewer.