Changeset 4047
- Timestamp:
- 06/15/10 11:13:28 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 7 added
- 2 deleted
- 86 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r4043 r4047 893 893 node=(Node*)(*object); 894 894 895 if (node->InAnalysis(analysis_type)){895 /*Check that this node corresponds to our analysis currently being carried out: */ 896 896 897 897 /*Ok, this object is a node, ask it to plug values into partition: */ -
issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp
r4043 r4047 173 173 case PressureOldEnum : return "PressureOld"; 174 174 case QmuPressureEnum : return "QmuPressure"; 175 case StokesPressureEnum : return "StokesPressure";175 case PressureStokesEnum : return "PressureStokes"; 176 176 case ResetPenaltiesEnum : return "ResetPenalties"; 177 177 case RheologyBEnum : return "RheologyB"; … … 217 217 case CmMaxEnum : return "CmMax"; 218 218 case CmMinEnum : return "CmMin"; 219 case GradientEnum : return "Gradient"; 219 220 case ConnectivityEnum : return "Connectivity"; 220 221 case ControlParameterEnum : return "ControlParameter"; -
issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
r4046 r4047 252 252 CmMaxEnum, 253 253 CmMinEnum, 254 GradientEnum, 254 255 ConnectivityEnum, 255 256 ControlParameterEnum, -
issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp
r4043 r4047 171 171 else if (strcmp(name,"PressureOld")==0) return PressureOldEnum; 172 172 else if (strcmp(name,"QmuPressure")==0) return QmuPressureEnum; 173 else if (strcmp(name," StokesPressure")==0) return StokesPressureEnum;173 else if (strcmp(name,"PressureStokes")==0) return PressureStokesEnum; 174 174 else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum; 175 175 else if (strcmp(name,"RheologyB")==0) return RheologyBEnum; … … 215 215 else if (strcmp(name,"CmMax")==0) return CmMaxEnum; 216 216 else if (strcmp(name,"CmMin")==0) return CmMinEnum; 217 else if (strcmp(name,"Gradient")==0) return GradientEnum; 217 218 else if (strcmp(name,"Connectivity")==0) return ConnectivityEnum; 218 219 else if (strcmp(name,"ControlParameter")==0) return ControlParameterEnum; -
issm/trunk/src/c/Makefile.am
r4046 r4047 391 391 ./modules/DuplicateInputx/DuplicateInputx.h\ 392 392 ./modules/DuplicateInputx/DuplicateInputx.cpp\ 393 ./modules/ScaleInputx/ScaleInputx.h\ 394 ./modules/ScaleInputx/ScaleInputx.cpp\ 393 395 ./modules/ControlConstrainx/ControlConstrainx.h\ 394 396 ./modules/ControlConstrainx/ControlConstrainx.cpp\ … … 887 889 ./modules/DuplicateInputx/DuplicateInputx.h\ 888 890 ./modules/DuplicateInputx/DuplicateInputx.cpp\ 891 ./modules/ScaleInputx/ScaleInputx.h\ 892 ./modules/ScaleInputx/ScaleInputx.cpp\ 889 893 ./modules/ControlConstrainx/ControlConstrainx.h\ 890 894 ./modules/ControlConstrainx/ControlConstrainx.cpp\ -
issm/trunk/src/c/modules/Gradjx/Gradjx.cpp
r4043 r4047 10 10 #include "../../EnumDefinitions/EnumDefinitions.h" 11 11 12 void Gradjx( Vec* pgrad_g, int numberofnodes,DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,int control_type){12 void Gradjx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters,int control_type){ 13 13 14 /*Intermediary*/15 14 int i; 16 Element* element=NULL;15 int dim; 17 16 18 /*output: */19 Vec grad_g=NULL;20 17 21 18 /*First, get elements and loads configured: */ … … 24 21 parameters->Configure(elements,loads, nodes,vertices, materials,parameters); 25 22 26 /*Allocate grad_g: */ 27 grad_g=NewVec(numberofnodes); 23 /*retrieve some parameters: */ 24 parameters->FindParam(&dim,DimEnum); 25 28 26 29 27 /*Compute gradients: */ 30 28 for (i=0;i<elements->Size();i++){ 31 element=(Element*)elements->GetObjectByOffset(i);32 element->Gradj( grad_g,control_type);29 Element* element=(Element*)elements->GetObjectByOffset(i); 30 element->Gradj(control_type); 33 31 } 34 32 35 /*Assemble vector: */ 36 VecAssemblyBegin(grad_g); 37 VecAssemblyEnd(grad_g); 33 /*Extrude if needed: */ 34 if(dim==3) InputsExtrudex( elements,nodes,vertices,loads,materials,parameters,GradientEnum,0); 38 35 39 /*Assign output pointers: */40 *pgrad_g=grad_g;41 36 } -
issm/trunk/src/c/modules/Gradjx/Gradjx.h
r3913 r4047 10 10 11 11 /* local prototypes: */ 12 void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters, 13 int analysis_type,int sub_analysis_type,int control_type); 12 void Gradjx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, Parameters* parameters, int control_type); 14 13 15 14 #endif /* _GRADJX_H */ -
issm/trunk/src/c/modules/modules.h
r4046 r4047 79 79 #include "./MaxAbsVzx/MaxAbsVzx.h" 80 80 #include "./DuplicateInputx/DuplicateInputx.h" 81 #include "./ScaleInputx/ScaleInputx.h" 81 82 82 83 #endif -
issm/trunk/src/c/objects/Elements/Beam.cpp
r4046 r4047 562 562 /*}}}*/ 563 563 /*FUNCTION Beam::Gradj{{{1*/ 564 void Beam::Gradj( Vec,int control_type){564 void Beam::Gradj(int control_type){ 565 565 ISSMERROR(" not supported yet!"); 566 566 } 567 567 /*}}}*/ 568 568 /*FUNCTION Beam::GradjB{{{1*/ 569 void Beam::GradjB( Vec){569 void Beam::GradjB(void){ 570 570 ISSMERROR(" not supported yet!"); 571 571 } 572 572 /*}}}*/ 573 573 /*FUNCTION Beam::GradjDrag{{{1*/ 574 void Beam::GradjDrag( Vec){574 void Beam::GradjDrag(void){ 575 575 ISSMERROR(" not supported yet!"); 576 576 } … … 990 990 } 991 991 /*}}}*/ 992 /*FUNCTION Beam::ScaleInput(int enum_type,double scale_factor){{{1*/ 993 void Beam::ScaleInput(int enum_type,double scale_factor){ 994 995 Input* input=NULL; 996 997 /*Make a copy of the original input: */ 998 input=(Input*)this->inputs->GetInput(enum_type); 999 1000 /*Scale: */ 1001 input->Scale(scale_factor); 1002 } 1003 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Beam.h
r4046 r4047 95 95 void MaxAbsVz(double* pmaxabsvz, bool process_units); 96 96 void DuplicateInput(int original_enum,int new_enum); 97 void ScaleInput(int enum_type,double scale_factor); 97 98 98 99 /*}}}*/ … … 103 104 void GetThicknessList(double* thickness_list); 104 105 void Du(Vec); 105 void Gradj( Vec,int control_type);106 void GradjDrag( Vec);107 void GradjB( Vec);106 void Gradj(int control_type); 107 void GradjDrag(void); 108 void GradjB(void); 108 109 double Misfit(void); 109 110 double SurfaceArea(void); -
issm/trunk/src/c/objects/Elements/Element.h
r4046 r4047 37 37 virtual void GetBedList(double* bed_list)=0; 38 38 virtual void Du(Vec du_g)=0; 39 virtual void Gradj( Vec grad_g,int control_type)=0;40 virtual void GradjDrag( Vec grad_g)=0;41 virtual void GradjB( Vec grad_g)=0;39 virtual void Gradj(int control_type)=0; 40 virtual void GradjDrag(void)=0; 41 virtual void GradjB(void)=0; 42 42 virtual double Misfit(void)=0; 43 43 virtual double CostFunction(void)=0; … … 65 65 virtual void MaxAbsVz(double* pmaxabsvz, bool process_units)=0; 66 66 virtual void DuplicateInput(int original_enum,int new_enum)=0; 67 virtual void ScaleInput(int enum_type,double scale_factor)=0; 67 68 68 69 -
issm/trunk/src/c/objects/Elements/Penta.cpp
r4046 r4047 4555 4555 /*}}}*/ 4556 4556 /*FUNCTION Penta::Gradj {{{1*/ 4557 void Penta::Gradj( Vec grad_g,int control_type){4557 void Penta::Gradj(int control_type){ 4558 4558 4559 4559 /*inputs: */ … … 4567 4567 4568 4568 if (control_type==DragCoefficientEnum){ 4569 GradjDrag( grad_g);4569 GradjDrag(); 4570 4570 } 4571 4571 else if (control_type=RheologyBEnum){ 4572 GradjB( grad_g);4572 GradjB(); 4573 4573 } 4574 4574 else ISSMERROR("%s%i","control type not supported yet: ",control_type); … … 4576 4576 /*}}}*/ 4577 4577 /*FUNCTION Penta::GradjDrag {{{1*/ 4578 void Penta::GradjDrag( Vec grad_g){4578 void Penta::GradjDrag(void){ 4579 4579 4580 4580 Tria* tria=NULL; 4581 TriaVertexInput* triavertexinput=NULL; 4582 double gradient[6]={0,0,0,0,0,0}; 4581 4583 4582 4584 /*inputs: */ … … 4586 4588 int analysis_type,sub_analysis_type; 4587 4589 4588 /*retri ve parameters: */4590 /*retrieve parameters: */ 4589 4591 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 4590 4592 parameters->FindParam(&sub_analysis_type,AnalysisTypeEnum); … … 4608 4610 /*MacAyeal or Pattyn*/ 4609 4611 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 4610 tria->GradjDrag( grad_g); 4611 delete tria; 4612 return; 4612 tria->GradjDrag(); 4613 4613 } 4614 4614 else if (sub_analysis_type==StokesAnalysisEnum){ … … 4616 4616 /*Stokes*/ 4617 4617 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 4618 tria->GradjDragStokes( grad_g); 4619 delete tria; 4620 return; 4618 tria->GradjDragStokes(); 4621 4619 } 4622 4620 else ISSMERROR("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet"); 4621 4622 /*Now, the tria has a GradientEnum input. Take it, and make a PentaVertexInput out of it, then delete the tria: */ 4623 triavertexinput=tria->inputs->GetInput(GradientEnum); 4624 for(i=0;i<3;i++)gradient[i]=triavertexinput->values[i]; 4625 this->inputs->AddInput(new PentaVertexInput(GradientEnum,&gradient[0])); 4626 4627 delete tria; 4628 4623 4629 } 4624 4630 /*}}}*/ 4625 4631 /*FUNCTION Penta::GradjB {{{1*/ 4626 void Penta::GradjB( Vec grad_g){4632 void Penta::GradjB(void){ 4627 4633 4628 4634 Tria* tria=NULL; 4635 TriaVertexInput* triavertexinput=NULL; 4636 double gradient[6]={0,0,0,0,0,0}; 4629 4637 4630 4638 /*inputs: */ … … 4648 4656 * and compute gardj*/ 4649 4657 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face). 4650 tria->GradjB(grad_g); 4651 delete tria; 4652 return; 4658 tria->GradjB(); 4653 4659 } 4654 4660 else{ 4655 4661 /*B is a 2d field, use MacAyeal(2d) gradient even if it is Stokes or Pattyn*/ 4656 4662 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria (lower face). 4657 tria->GradjB(grad_g); 4658 delete tria; 4659 return; 4660 } 4663 tria->GradjB(); 4664 } 4665 4666 /*Now, the tria has a GradientEnum input. Take it, and make a PentaVertexInput out of it, then delete the tria: */ 4667 triavertexinput=tria->inputs->GetInput(GradientEnum); 4668 for(i=0;i<3;i++)gradient[i]=triavertexinput->values[i]; 4669 this->inputs->AddInput(new PentaVertexInput(GradientEnum,&gradient[0])); 4670 4671 delete tria; 4672 4661 4673 } 4662 4674 /*}}}*/ … … 5328 5340 } 5329 5341 /*}}}*/ 5342 /*FUNCTION Penta::ScaleInput(int enum_type,double scale_factor){{{1*/ 5343 void Penta::ScaleInput(int enum_type,double scale_factor){ 5344 5345 Input* input=NULL; 5346 5347 /*Make a copy of the original input: */ 5348 input=(Input*)this->inputs->GetInput(enum_type); 5349 5350 /*Scale: */ 5351 input->Scale(scale_factor); 5352 } 5353 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Penta.h
r4046 r4047 86 86 bool GetOnBed(); 87 87 void Du(Vec du_gg); 88 void Gradj( Vec grad_gg,int control_type);89 void GradjDrag( Vec grad_gg);90 void GradjB( Vec grad_gg);88 void Gradj(int control_type); 89 void GradjDrag(void); 90 void GradjB(void); 91 91 double Misfit(void); 92 92 double SurfaceArea(void); … … 162 162 void MaxAbsVz(double* pmaxabsvz, bool process_units); 163 163 void DuplicateInput(int original_enum,int new_enum); 164 void ScaleInput(int enum_type,double scale_factor); 164 165 165 166 -
issm/trunk/src/c/objects/Elements/Sing.cpp
r4046 r4047 383 383 /*}}}*/ 384 384 /*FUNCTION Sing::Gradj {{{1*/ 385 void Sing::Gradj( Vec,int control_type){385 void Sing::Gradj(int control_type){ 386 386 ISSMERROR(" not supported yet!"); 387 387 } 388 388 /*}}}*/ 389 389 /*FUNCTION Sing::GradB {{{1*/ 390 void Sing::GradjB( Vec){390 void Sing::GradjB(void){ 391 391 ISSMERROR(" not supported yet!"); 392 392 } 393 393 /*}}}*/ 394 394 /*FUNCTION Sing::GradjDrag {{{1*/ 395 void Sing::GradjDrag( Vec){395 void Sing::GradjDrag(void){ 396 396 ISSMERROR(" not supported yet!"); 397 397 } … … 696 696 } 697 697 /*}}}*/ 698 /*FUNCTION Sing::ScaleInput(int enum_type,double scale_factor){{{1*/ 699 void Sing::ScaleInput(int enum_type,double scale_factor){ 700 701 Input* input=NULL; 702 703 /*Make a copy of the original input: */ 704 input=(Input*)this->inputs->GetInput(enum_type); 705 706 /*Scale: */ 707 input->Scale(scale_factor); 708 } 709 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Sing.h
r4046 r4047 94 94 void MaxAbsVz(double* pmaxabsvz, bool process_units); 95 95 void DuplicateInput(int original_enum,int new_enum); 96 void ScaleInput(int enum_type,double scale_factor); 96 97 97 98 … … 103 104 void GetThicknessList(double* thickness_list); 104 105 void Du(Vec); 105 void Gradj( Vec,int control_type);106 void GradjDrag( Vec);107 void GradjB( Vec);106 void Gradj(int control_type); 107 void GradjDrag(void); 108 void GradjB(void); 108 109 double Misfit(void); 109 110 double SurfaceArea(void); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r4046 r4047 4125 4125 /*}}}*/ 4126 4126 /*FUNCTION Tria::Gradj {{{1*/ 4127 void Tria::Gradj( Vec grad_g,int control_type){4127 void Tria::Gradj(int control_type){ 4128 4128 4129 4129 /*inputs: */ … … 4137 4137 4138 4138 if (control_type==DragCoefficientEnum){ 4139 GradjDrag( grad_g);4139 GradjDrag(); 4140 4140 } 4141 4141 else if (control_type==RheologyBEnum){ 4142 GradjB( grad_g);4142 GradjB(); 4143 4143 } 4144 4144 else ISSMERROR("%s%i","control type not supported yet: ",control_type); 4145 } 4146 /*}}}*/ 4147 /*FUNCTION Tria::GradjDrag {{{1*/ 4148 void Tria::GradjDrag(void){ 4149 4150 4151 int i; 4152 4153 /* node data: */ 4154 const int numgrids=3; 4155 const int NDOF2=2; 4156 const int numdof=NDOF2*numgrids; 4157 double xyz_list[numgrids][3]; 4158 int doflist1[numgrids]; 4159 double dh1dh3[NDOF2][numgrids]; 4160 4161 /* grid data: */ 4162 double adjx_list[numgrids]; 4163 double adjy_list[numgrids]; 4164 4165 /* gaussian points: */ 4166 int num_gauss,ig; 4167 double* first_gauss_area_coord = NULL; 4168 double* second_gauss_area_coord = NULL; 4169 double* third_gauss_area_coord = NULL; 4170 double* gauss_weights = NULL; 4171 double gauss_weight; 4172 double gauss_l1l2l3[3]; 4173 4174 /* parameters: */ 4175 double dk[NDOF2]; 4176 double vx,vy; 4177 double lambda,mu; 4178 double bed,thickness,Neff; 4179 double alpha_complement; 4180 int drag_type; 4181 double drag; 4182 Friction* friction=NULL; 4183 4184 /*element vector at the gaussian points: */ 4185 double grade_g[numgrids]={0.0}; 4186 double grade_g_gaussian[numgrids]; 4187 4188 /* Jacobian: */ 4189 double Jdet; 4190 4191 /*nodal functions: */ 4192 double l1l2l3[3]; 4193 4194 /* strain rate: */ 4195 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 4196 4197 /*inputs: */ 4198 bool shelf; 4199 4200 /*parameters: */ 4201 double cm_noisedmp; 4202 double cm_mindmp_slope; 4203 double cm_mindmp_value; 4204 double cm_maxdmp_value; 4205 double cm_maxdmp_slope; 4206 4207 int analysis_type; 4208 4209 /*retrive parameters: */ 4210 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 4211 4212 /*retrieve inputs :*/ 4213 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum); 4214 4215 /*retrieve some parameters: */ 4216 this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum); 4217 this->parameters->FindParam(&cm_mindmp_value,CmMinDmpValueEnum); 4218 this->parameters->FindParam(&cm_mindmp_slope,CmMinDmpSlopeEnum); 4219 this->parameters->FindParam(&cm_maxdmp_value,CmMaxDmpValueEnum); 4220 this->parameters->FindParam(&cm_maxdmp_slope,CmMaxDmpSlopeEnum); 4221 4222 4223 /*Get out if shelf*/ 4224 if(shelf)return; 4225 4226 /* Get node coordinates and dof list: */ 4227 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids); 4228 GetDofList1(&doflist1[0]); 4229 4230 /*Build frictoin element, needed later: */ 4231 inputs->GetParameterValue(&drag_type,DragTypeEnum); 4232 friction=new Friction("2d",inputs,matpar,analysis_type); 4233 4234 /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */ 4235 GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 4); 4236 4237 /* Start looping on the number of gaussian points: */ 4238 for (ig=0; ig<num_gauss; ig++){ 4239 /*Pick up the gaussian point: */ 4240 gauss_weight=*(gauss_weights+ig); 4241 gauss_l1l2l3[0]=*(first_gauss_area_coord+ig); 4242 gauss_l1l2l3[1]=*(second_gauss_area_coord+ig); 4243 gauss_l1l2l3[2]=*(third_gauss_area_coord+ig); 4244 4245 /*Build alpha_complement_list: */ 4246 if (drag_type==2) friction->GetAlphaComplement(&alpha_complement, gauss_l1l2l3,VxAverageEnum,VyAverageEnum); 4247 else alpha_complement=0; 4248 4249 /*Recover alpha_complement and k: */ 4250 inputs->GetParameterValue(&drag, gauss_l1l2l3,DragCoefficientEnum); 4251 4252 /*recover lambda and mu: */ 4253 inputs->GetParameterValue(&lambda, gauss_l1l2l3,AdjointxEnum); 4254 inputs->GetParameterValue(&mu, gauss_l1l2l3,AdjointyEnum); 4255 4256 /*recover vx and vy: */ 4257 inputs->GetParameterValue(&vx, gauss_l1l2l3,VxEnum); 4258 inputs->GetParameterValue(&vy, gauss_l1l2l3,VyEnum); 4259 4260 /* Get Jacobian determinant: */ 4261 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss_l1l2l3); 4262 4263 /* Get nodal functions value at gaussian point:*/ 4264 GetNodalFunctions(l1l2l3, gauss_l1l2l3); 4265 4266 /*Get nodal functions derivatives*/ 4267 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3); 4268 4269 /*Get k derivative: dk/dx */ 4270 inputs->GetParameterDerivativeValue(&dk[0],&xyz_list[0][0],&gauss_l1l2l3[0],DragCoefficientEnum); 4271 4272 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 4273 for (i=0;i<numgrids;i++){ 4274 4275 //standard term dJ/dki 4276 grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss_weight*l1l2l3[i]; 4277 4278 //noise dampening d/dki(1/2*(dk/dx)^2) 4279 grade_g_gaussian[i]+=-cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]); 4280 4281 //min dampening 4282 if(drag<cm_mindmp_value){ 4283 grade_g_gaussian[i]+=cm_mindmp_slope*Jdet*gauss_weight*l1l2l3[i]; 4284 } 4285 4286 //max dampening 4287 if(drag>cm_maxdmp_value){ 4288 grade_g_gaussian[i]+= - cm_maxdmp_slope*Jdet*gauss_weight*l1l2l3[i]; 4289 } 4290 } 4291 4292 /*Add gradje_g_gaussian vector to gradje_g: */ 4293 for( i=0; i<numgrids; i++)grade_g[i]+=grade_g_gaussian[i]; 4294 } 4295 4296 4297 /*Add grade_g to the inputs of this element: */ 4298 this->inputs->AddInput(new TriaVertexInput(GradientEnum,&grade_g[0])); 4299 4300 cleanup_and_return: 4301 xfree((void**)&first_gauss_area_coord); 4302 xfree((void**)&second_gauss_area_coord); 4303 xfree((void**)&third_gauss_area_coord); 4304 xfree((void**)&gauss_weights); 4305 delete friction; 4306 4307 } 4308 /*}}}*/ 4309 /*FUNCTION Tria::GradjDragStokes {{{1*/ 4310 void Tria::GradjDragStokes(Vec grad_g){ 4311 4312 int i; 4313 4314 /* node data: */ 4315 const int numgrids=3; 4316 const int NDOF2=2; 4317 double xyz_list[numgrids][3]; 4318 int doflist1[numgrids]; 4319 double dh1dh3[NDOF2][numgrids]; 4320 4321 /* grid data: */ 4322 double drag; 4323 double alpha_complement; 4324 Friction* friction=NULL; 4325 4326 /* gaussian points: */ 4327 int num_gauss,ig; 4328 double* first_gauss_area_coord = NULL; 4329 double* second_gauss_area_coord = NULL; 4330 double* third_gauss_area_coord = NULL; 4331 double* gauss_weights = NULL; 4332 double gauss_weight; 4333 double gauss_l1l2l3[3]; 4334 double gaussgrids[numgrids][numgrids]={{1,0,0},{0,1,0},{0,0,1}}; 4335 4336 /* parameters: */ 4337 double vx,vy,vz; 4338 double lambda,mu,xi; 4339 double bed,thickness,Neff; 4340 double surface_normal[3]; 4341 double bed_normal[3]; 4342 double dk[NDOF2]; 4343 4344 /*element vector at the gaussian points: */ 4345 double grade_g[numgrids]={0.0}; 4346 double grade_g_gaussian[numgrids]; 4347 4348 /* Jacobian: */ 4349 double Jdet; 4350 4351 /*nodal functions: */ 4352 double l1l2l3[3]; 4353 4354 /* strain rate: */ 4355 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 4356 4357 /*inputs: */ 4358 bool shelf; 4359 int drag_type; 4360 4361 /*parameters: */ 4362 double cm_noisedmp; 4363 double cm_mindmp_slope; 4364 double cm_mindmp_value; 4365 double cm_maxdmp_value; 4366 double cm_maxdmp_slope; 4367 4368 int analysis_type; 4369 4370 /*retrive parameters: */ 4371 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 4372 4373 /*retrieve inputs :*/ 4374 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum); 4375 inputs->GetParameterValue(&drag_type,DragTypeEnum); 4376 4377 /*retrieve some parameters: */ 4378 this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum); 4379 this->parameters->FindParam(&cm_mindmp_value,CmMinDmpValueEnum); 4380 this->parameters->FindParam(&cm_mindmp_slope,CmMinDmpSlopeEnum); 4381 this->parameters->FindParam(&cm_maxdmp_value,CmMaxDmpValueEnum); 4382 this->parameters->FindParam(&cm_maxdmp_slope,CmMaxDmpSlopeEnum); 4383 4384 /*Get out if shelf*/ 4385 if(shelf)return; 4386 4387 /* Get node coordinates and dof list: */ 4388 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids); 4389 GetDofList1(&doflist1[0]); 4390 4391 /*Build frictoin element, needed later: */ 4392 inputs->GetParameterValue(&drag_type,DragTypeEnum); 4393 friction=new Friction("2d",inputs,matpar,analysis_type); 4394 4395 /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */ 4396 GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 4); 4397 4398 /* Start looping on the number of gaussian points: */ 4399 for (ig=0; ig<num_gauss; ig++){ 4400 /*Pick up the gaussian point: */ 4401 gauss_weight=*(gauss_weights+ig); 4402 gauss_l1l2l3[0]=*(first_gauss_area_coord+ig); 4403 gauss_l1l2l3[1]=*(second_gauss_area_coord+ig); 4404 gauss_l1l2l3[2]=*(third_gauss_area_coord+ig); 4405 4406 /*Recover alpha_complement and drag: */ 4407 if (drag_type==2) friction->GetAlphaComplement(&alpha_complement, gauss_l1l2l3,VxAverageEnum,VyAverageEnum); 4408 else alpha_complement=0; 4409 inputs->GetParameterValue(&drag, &gauss_l1l2l3[0],DragCoefficientEnum); 4410 4411 /*recover lambda mu and xi: */ 4412 inputs->GetParameterValue(&lambda, &gauss_l1l2l3[0],AdjointxEnum); 4413 inputs->GetParameterValue(&mu, &gauss_l1l2l3[0],AdjointyEnum); 4414 inputs->GetParameterValue(&xi, &gauss_l1l2l3[0],AdjointzEnum); 4415 4416 /*recover vx vy and vz: */ 4417 inputs->GetParameterValue(&vx, &gauss_l1l2l3[0],VxEnum); 4418 inputs->GetParameterValue(&vy, &gauss_l1l2l3[0],VyEnum); 4419 inputs->GetParameterValue(&vz, &gauss_l1l2l3[0],VzEnum); 4420 4421 /*Get normal vector to the bed */ 4422 SurfaceNormal(&surface_normal[0],xyz_list); 4423 4424 bed_normal[0]=-surface_normal[0]; //Program is for surface, so the normal to the bed is the opposite of the result 4425 bed_normal[1]=-surface_normal[1]; 4426 bed_normal[2]=-surface_normal[2]; 4427 4428 /* Get Jacobian determinant: */ 4429 GetJacobianDeterminant3d(&Jdet, &xyz_list[0][0],gauss_l1l2l3); 4430 4431 /* Get nodal functions value at gaussian point:*/ 4432 GetNodalFunctions(l1l2l3, gauss_l1l2l3); 4433 4434 /*Get nodal functions derivatives*/ 4435 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3); 4436 4437 /*Get k derivative: dk/dx */ 4438 inputs->GetParameterDerivativeValue(&dk[0],&xyz_list[0][0],&gauss_l1l2l3[0],DragCoefficientEnum); 4439 4440 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 4441 for (i=0;i<numgrids;i++){ 4442 //standard gradient dJ/dki 4443 grade_g_gaussian[i]=( 4444 -lambda*(2*drag*alpha_complement*(vx - vz*bed_normal[0]*bed_normal[2])) 4445 -mu *(2*drag*alpha_complement*(vy - vz*bed_normal[1]*bed_normal[2])) 4446 -xi *(2*drag*alpha_complement*(-vx*bed_normal[0]*bed_normal[2]-vy*bed_normal[1]*bed_normal[2])) 4447 )*Jdet*gauss_weight*l1l2l3[i]; 4448 4449 //Add regularization term 4450 grade_g_gaussian[i]+= - cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]); 4451 4452 //min dampening 4453 if(drag<cm_mindmp_value){ 4454 grade_g_gaussian[i]+= cm_mindmp_slope*Jdet*gauss_weight*l1l2l3[i]; 4455 } 4456 4457 //max dampening 4458 if(drag>cm_maxdmp_value){ 4459 grade_g_gaussian[i]+= - cm_maxdmp_slope*Jdet*gauss_weight*l1l2l3[i]; 4460 } 4461 } 4462 4463 /*Add gradje_g_gaussian vector to gradje_g: */ 4464 for( i=0; i<numgrids; i++)grade_g[i]+=grade_g_gaussian[i]; 4465 } 4466 4467 /*Add grade_g to the inputs of this element: */ 4468 this->inputs->AddInput(new TriaVertexInput(GradientEnum,&grade_g[0])); 4469 4470 cleanup_and_return: 4471 xfree((void**)&first_gauss_area_coord); 4472 xfree((void**)&second_gauss_area_coord); 4473 xfree((void**)&third_gauss_area_coord); 4474 xfree((void**)&gauss_weights); 4475 delete friction; 4476 4145 4477 } 4146 4478 /*}}}*/ … … 4281 4613 } 4282 4614 4283 /*Add grade_g to global vector grad_g: */ 4284 VecSetValues(grad_g,numgrids,doflist1,(const double*)grade_g,ADD_VALUES); 4285 4286 cleanup_and_return: 4287 xfree((void**)&first_gauss_area_coord); 4288 xfree((void**)&second_gauss_area_coord); 4289 xfree((void**)&third_gauss_area_coord); 4290 xfree((void**)&gauss_weights); 4291 } 4292 /*}}}*/ 4293 /*FUNCTION Tria::GradjDrag {{{1*/ 4294 void Tria::GradjDrag(Vec grad_g){ 4295 4296 4297 int i; 4298 4299 /* node data: */ 4300 const int numgrids=3; 4301 const int NDOF2=2; 4302 const int numdof=NDOF2*numgrids; 4303 double xyz_list[numgrids][3]; 4304 int doflist1[numgrids]; 4305 double dh1dh3[NDOF2][numgrids]; 4306 4307 /* grid data: */ 4308 double adjx_list[numgrids]; 4309 double adjy_list[numgrids]; 4310 4311 /* gaussian points: */ 4312 int num_gauss,ig; 4313 double* first_gauss_area_coord = NULL; 4314 double* second_gauss_area_coord = NULL; 4315 double* third_gauss_area_coord = NULL; 4316 double* gauss_weights = NULL; 4317 double gauss_weight; 4318 double gauss_l1l2l3[3]; 4319 4320 /* parameters: */ 4321 double dk[NDOF2]; 4322 double vx,vy; 4323 double lambda,mu; 4324 double bed,thickness,Neff; 4325 double alpha_complement; 4326 int drag_type; 4327 double drag; 4328 Friction* friction=NULL; 4329 4330 /*element vector at the gaussian points: */ 4331 double grade_g[numgrids]={0.0}; 4332 double grade_g_gaussian[numgrids]; 4333 4334 /* Jacobian: */ 4335 double Jdet; 4336 4337 /*nodal functions: */ 4338 double l1l2l3[3]; 4339 4340 /* strain rate: */ 4341 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/ 4342 4343 /*inputs: */ 4344 bool shelf; 4345 4346 /*parameters: */ 4347 double cm_noisedmp; 4348 double cm_mindmp_slope; 4349 double cm_mindmp_value; 4350 double cm_maxdmp_value; 4351 double cm_maxdmp_slope; 4352 4353 int analysis_type; 4354 4355 /*retrive parameters: */ 4356 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 4357 4358 /*retrieve inputs :*/ 4359 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum); 4360 4361 /*retrieve some parameters: */ 4362 this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum); 4363 this->parameters->FindParam(&cm_mindmp_value,CmMinDmpValueEnum); 4364 this->parameters->FindParam(&cm_mindmp_slope,CmMinDmpSlopeEnum); 4365 this->parameters->FindParam(&cm_maxdmp_value,CmMaxDmpValueEnum); 4366 this->parameters->FindParam(&cm_maxdmp_slope,CmMaxDmpSlopeEnum); 4367 4368 4369 /*Get out if shelf*/ 4370 if(shelf)return; 4371 4372 /* Get node coordinates and dof list: */ 4373 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids); 4374 GetDofList1(&doflist1[0]); 4375 4376 /*Build frictoin element, needed later: */ 4377 inputs->GetParameterValue(&drag_type,DragTypeEnum); 4378 friction=new Friction("2d",inputs,matpar,analysis_type); 4379 4380 /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */ 4381 GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 4); 4382 4383 /* Start looping on the number of gaussian points: */ 4384 for (ig=0; ig<num_gauss; ig++){ 4385 /*Pick up the gaussian point: */ 4386 gauss_weight=*(gauss_weights+ig); 4387 gauss_l1l2l3[0]=*(first_gauss_area_coord+ig); 4388 gauss_l1l2l3[1]=*(second_gauss_area_coord+ig); 4389 gauss_l1l2l3[2]=*(third_gauss_area_coord+ig); 4390 4391 /*Build alpha_complement_list: */ 4392 if (drag_type==2) friction->GetAlphaComplement(&alpha_complement, gauss_l1l2l3,VxAverageEnum,VyAverageEnum); 4393 else alpha_complement=0; 4394 4395 /*Recover alpha_complement and k: */ 4396 inputs->GetParameterValue(&drag, gauss_l1l2l3,DragCoefficientEnum); 4397 4398 /*recover lambda and mu: */ 4399 inputs->GetParameterValue(&lambda, gauss_l1l2l3,AdjointxEnum); 4400 inputs->GetParameterValue(&mu, gauss_l1l2l3,AdjointyEnum); 4401 4402 /*recover vx and vy: */ 4403 inputs->GetParameterValue(&vx, gauss_l1l2l3,VxEnum); 4404 inputs->GetParameterValue(&vy, gauss_l1l2l3,VyEnum); 4405 4406 /* Get Jacobian determinant: */ 4407 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss_l1l2l3); 4408 4409 /* Get nodal functions value at gaussian point:*/ 4410 GetNodalFunctions(l1l2l3, gauss_l1l2l3); 4411 4412 /*Get nodal functions derivatives*/ 4413 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3); 4414 4415 /*Get k derivative: dk/dx */ 4416 inputs->GetParameterDerivativeValue(&dk[0],&xyz_list[0][0],&gauss_l1l2l3[0],DragCoefficientEnum); 4417 4418 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 4419 for (i=0;i<numgrids;i++){ 4420 4421 //standard term dJ/dki 4422 grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss_weight*l1l2l3[i]; 4423 4424 //noise dampening d/dki(1/2*(dk/dx)^2) 4425 grade_g_gaussian[i]+=-cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]); 4426 4427 //min dampening 4428 if(drag<cm_mindmp_value){ 4429 grade_g_gaussian[i]+=cm_mindmp_slope*Jdet*gauss_weight*l1l2l3[i]; 4430 } 4431 4432 //max dampening 4433 if(drag>cm_maxdmp_value){ 4434 grade_g_gaussian[i]+= - cm_maxdmp_slope*Jdet*gauss_weight*l1l2l3[i]; 4435 } 4436 } 4437 4438 /*Add gradje_g_gaussian vector to gradje_g: */ 4439 for( i=0; i<numgrids; i++)grade_g[i]+=grade_g_gaussian[i]; 4440 } 4441 4442 /*Add grade_g to global vector grad_g: */ 4443 VecSetValues(grad_g,numgrids,doflist1,(const double*)grade_g,ADD_VALUES); 4444 4615 /*Add grade_g to the inputs of this element: */ 4616 this->inputs->AddInput(new TriaVertexInput(GradientEnum,&grade_g[0])); 4617 4445 4618 cleanup_and_return: 4446 4619 xfree((void**)&first_gauss_area_coord); … … 4448 4621 xfree((void**)&third_gauss_area_coord); 4449 4622 xfree((void**)&gauss_weights); 4450 delete friction;4451 4452 }4453 /*}}}*/4454 /*FUNCTION Tria::GradjDragStokes {{{1*/4455 void Tria::GradjDragStokes(Vec grad_g){4456 4457 int i;4458 4459 /* node data: */4460 const int numgrids=3;4461 const int NDOF2=2;4462 double xyz_list[numgrids][3];4463 int doflist1[numgrids];4464 double dh1dh3[NDOF2][numgrids];4465 4466 /* grid data: */4467 double drag;4468 double alpha_complement;4469 Friction* friction=NULL;4470 4471 /* gaussian points: */4472 int num_gauss,ig;4473 double* first_gauss_area_coord = NULL;4474 double* second_gauss_area_coord = NULL;4475 double* third_gauss_area_coord = NULL;4476 double* gauss_weights = NULL;4477 double gauss_weight;4478 double gauss_l1l2l3[3];4479 double gaussgrids[numgrids][numgrids]={{1,0,0},{0,1,0},{0,0,1}};4480 4481 /* parameters: */4482 double vx,vy,vz;4483 double lambda,mu,xi;4484 double bed,thickness,Neff;4485 double surface_normal[3];4486 double bed_normal[3];4487 double dk[NDOF2];4488 4489 /*element vector at the gaussian points: */4490 double grade_g[numgrids]={0.0};4491 double grade_g_gaussian[numgrids];4492 4493 /* Jacobian: */4494 double Jdet;4495 4496 /*nodal functions: */4497 double l1l2l3[3];4498 4499 /* strain rate: */4500 double epsilon[3]; /* epsilon=[exx,eyy,exy];*/4501 4502 /*inputs: */4503 bool shelf;4504 int drag_type;4505 4506 /*parameters: */4507 double cm_noisedmp;4508 double cm_mindmp_slope;4509 double cm_mindmp_value;4510 double cm_maxdmp_value;4511 double cm_maxdmp_slope;4512 4513 int analysis_type;4514 4515 /*retrive parameters: */4516 parameters->FindParam(&analysis_type,AnalysisTypeEnum);4517 4518 /*retrieve inputs :*/4519 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum);4520 inputs->GetParameterValue(&drag_type,DragTypeEnum);4521 4522 /*retrieve some parameters: */4523 this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum);4524 this->parameters->FindParam(&cm_mindmp_value,CmMinDmpValueEnum);4525 this->parameters->FindParam(&cm_mindmp_slope,CmMinDmpSlopeEnum);4526 this->parameters->FindParam(&cm_maxdmp_value,CmMaxDmpValueEnum);4527 this->parameters->FindParam(&cm_maxdmp_slope,CmMaxDmpSlopeEnum);4528 4529 /*Get out if shelf*/4530 if(shelf)return;4531 4532 /* Get node coordinates and dof list: */4533 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);4534 GetDofList1(&doflist1[0]);4535 4536 /*Build frictoin element, needed later: */4537 inputs->GetParameterValue(&drag_type,DragTypeEnum);4538 friction=new Friction("2d",inputs,matpar,analysis_type);4539 4540 /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */4541 GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 4);4542 4543 /* Start looping on the number of gaussian points: */4544 for (ig=0; ig<num_gauss; ig++){4545 /*Pick up the gaussian point: */4546 gauss_weight=*(gauss_weights+ig);4547 gauss_l1l2l3[0]=*(first_gauss_area_coord+ig);4548 gauss_l1l2l3[1]=*(second_gauss_area_coord+ig);4549 gauss_l1l2l3[2]=*(third_gauss_area_coord+ig);4550 4551 /*Recover alpha_complement and drag: */4552 if (drag_type==2) friction->GetAlphaComplement(&alpha_complement, gauss_l1l2l3,VxAverageEnum,VyAverageEnum);4553 else alpha_complement=0;4554 inputs->GetParameterValue(&drag, &gauss_l1l2l3[0],DragCoefficientEnum);4555 4556 /*recover lambda mu and xi: */4557 inputs->GetParameterValue(&lambda, &gauss_l1l2l3[0],AdjointxEnum);4558 inputs->GetParameterValue(&mu, &gauss_l1l2l3[0],AdjointyEnum);4559 inputs->GetParameterValue(&xi, &gauss_l1l2l3[0],AdjointzEnum);4560 4561 /*recover vx vy and vz: */4562 inputs->GetParameterValue(&vx, &gauss_l1l2l3[0],VxEnum);4563 inputs->GetParameterValue(&vy, &gauss_l1l2l3[0],VyEnum);4564 inputs->GetParameterValue(&vz, &gauss_l1l2l3[0],VzEnum);4565 4566 /*Get normal vector to the bed */4567 SurfaceNormal(&surface_normal[0],xyz_list);4568 4569 bed_normal[0]=-surface_normal[0]; //Program is for surface, so the normal to the bed is the opposite of the result4570 bed_normal[1]=-surface_normal[1];4571 bed_normal[2]=-surface_normal[2];4572 4573 /* Get Jacobian determinant: */4574 GetJacobianDeterminant3d(&Jdet, &xyz_list[0][0],gauss_l1l2l3);4575 4576 /* Get nodal functions value at gaussian point:*/4577 GetNodalFunctions(l1l2l3, gauss_l1l2l3);4578 4579 /*Get nodal functions derivatives*/4580 GetNodalFunctionsDerivatives(&dh1dh3[0][0],&xyz_list[0][0],gauss_l1l2l3);4581 4582 /*Get k derivative: dk/dx */4583 inputs->GetParameterDerivativeValue(&dk[0],&xyz_list[0][0],&gauss_l1l2l3[0],DragCoefficientEnum);4584 4585 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */4586 for (i=0;i<numgrids;i++){4587 //standard gradient dJ/dki4588 grade_g_gaussian[i]=(4589 -lambda*(2*drag*alpha_complement*(vx - vz*bed_normal[0]*bed_normal[2]))4590 -mu *(2*drag*alpha_complement*(vy - vz*bed_normal[1]*bed_normal[2]))4591 -xi *(2*drag*alpha_complement*(-vx*bed_normal[0]*bed_normal[2]-vy*bed_normal[1]*bed_normal[2]))4592 )*Jdet*gauss_weight*l1l2l3[i];4593 4594 //Add regularization term4595 grade_g_gaussian[i]+= - cm_noisedmp*Jdet*gauss_weight*(dh1dh3[0][i]*dk[0]+dh1dh3[1][i]*dk[1]);4596 4597 //min dampening4598 if(drag<cm_mindmp_value){4599 grade_g_gaussian[i]+= cm_mindmp_slope*Jdet*gauss_weight*l1l2l3[i];4600 }4601 4602 //max dampening4603 if(drag>cm_maxdmp_value){4604 grade_g_gaussian[i]+= - cm_maxdmp_slope*Jdet*gauss_weight*l1l2l3[i];4605 }4606 }4607 4608 /*Add gradje_g_gaussian vector to gradje_g: */4609 for( i=0; i<numgrids; i++)grade_g[i]+=grade_g_gaussian[i];4610 }4611 4612 /*Add grade_g to global vector grad_g: */4613 VecSetValues(grad_g,numgrids,doflist1,(const double*)grade_g,ADD_VALUES);4614 4615 cleanup_and_return:4616 xfree((void**)&first_gauss_area_coord);4617 xfree((void**)&second_gauss_area_coord);4618 xfree((void**)&third_gauss_area_coord);4619 xfree((void**)&gauss_weights);4620 delete friction;4621 4622 4623 } 4623 4624 /*}}}*/ … … 5437 5438 } 5438 5439 /*}}}*/ 5440 /*FUNCTION Tria::ScaleInput(int enum_type,double scale_factor){{{1*/ 5441 void Tria::ScaleInput(int enum_type,double scale_factor){ 5442 5443 Input* input=NULL; 5444 5445 /*Make a copy of the original input: */ 5446 input=(Input*)this->inputs->GetInput(enum_type); 5447 5448 /*Scale: */ 5449 input->Scale(scale_factor); 5450 } 5451 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Tria.h
r4046 r4047 88 88 void GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3); 89 89 void Du(Vec du_g); 90 void Gradj(Vec grad_g,int control_type); 91 void GradjDrag(Vec grad_g); 92 void GradjDragStokes(Vec grad_g); 90 void Gradj(int control_type); 91 void GradjDrag(void); 92 void GradjDragStokes(void); 93 void GradjB(void); 93 94 void SurfaceNormal(double* surface_normal, double xyz_list[3][3]); 94 void GradjB(Vec grad_g);95 95 double Misfit(void); 96 96 double SurfaceArea(void); … … 140 140 void MaxAbsVz(double* pmaxabsvz, bool process_units); 141 141 void DuplicateInput(int original_enum,int new_enum); 142 void ScaleInput(int enum_type,double scale_factor); 142 143 143 144 -
issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp
r4043 r4047 250 250 } 251 251 /*}}}*/ 252 /*FUNCTION BeamVertexInput::Scale(double scale_factor){{{1*/ 253 void BeamVertexInput::Scale(double scale_factor){ 254 255 int i; 256 const int numgrids=2; 257 258 for(i=0;i<numgrids;i++)values[i]=values[i]*scale_factor; 259 } 260 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/BeamVertexInput.h
r4043 r4047 74 74 void ChangeEnum(int newenumtype); 75 75 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 76 void Scale(double scale_factor); 76 77 /*}}}*/ 77 78 -
issm/trunk/src/c/objects/Inputs/BoolInput.cpp
r4042 r4047 223 223 } 224 224 /*}}}*/ 225 /*FUNCTION BoolInput::Scale(double scale_factor){{{1*/ 226 void BoolInput::Scale(double scale_factor){ 227 /*a bool cannot be scaled: */ 228 } 229 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/BoolInput.h
r4043 r4047 74 74 void ChangeEnum(int newenumtype); 75 75 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 76 void Scale(double scale_factor); 76 77 /*}}}*/ 77 78 -
issm/trunk/src/c/objects/Inputs/DoubleInput.cpp
r4042 r4047 234 234 } 235 235 /*}}}*/ 236 /*FUNCTION DoubleInput::Scale(double scale_factor){{{1*/ 237 void DoubleInput::Scale(double scale_factor){ 238 value=value*scale_factor; 239 } 240 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/DoubleInput.h
r4043 r4047 75 75 void ChangeEnum(int newenumtype); 76 76 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 77 void Scale(double scale_factor); 77 78 /*}}}*/ 78 79 -
issm/trunk/src/c/objects/Inputs/Input.h
r4042 r4047 51 51 virtual Result* SpawnResult(int step, double time)=0; 52 52 virtual void SquareMin(double* psquaremin, bool process_units,Parameters* parameters)=0; 53 virtual void Scale(double scale_factor)=0; 53 54 /*}}}*/ 54 55 -
issm/trunk/src/c/objects/Inputs/IntInput.cpp
r4042 r4047 221 221 } 222 222 /*}}}*/ 223 /*FUNCTION IntInput::Scale(double scale_factor){{{1*/ 224 void IntInput::Scale(double scale_factor){ 225 value=value*scale_factor; 226 } 227 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/IntInput.h
r4043 r4047 74 74 void ChangeEnum(int newenumtype); 75 75 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 76 void Scale(double scale_factor); 76 77 /*}}}*/ 77 78 -
issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
r4043 r4047 899 899 } 900 900 /*}}}*/ 901 /*FUNCTION PentaVertexInput::Scale(double scale_factor){{{1*/ 902 void PentaVertexInput::Scale(double scale_factor){ 903 904 int i; 905 const int numgrids=6; 906 907 for(i=0;i<numgrids;i++)values[i]=values[i]*scale_factor; 908 } 909 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
r4043 r4047 83 83 void GetBStokes(double* B, double* xyz_list, double* gauss_coord); 84 84 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 85 void Scale(double scale_factor); 85 86 /*}}}*/ 86 87 -
issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp
r4043 r4047 224 224 } 225 225 /*}}}*/ 226 /*FUNCTION SingVertexInput::Scale(double scale_factor){{{1*/ 227 void SingVertexInput::Scale(double scale_factor){ 228 value=value*scale_factor; 229 } 230 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/SingVertexInput.h
r4043 r4047 73 73 void ChangeEnum(int newenumtype); 74 74 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 75 void Scale(double scale_factor); 75 76 /*}}}*/ 76 77 -
issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
r4043 r4047 473 473 } 474 474 /*}}}*/ 475 /*FUNCTION TriaVertexInput::Scale(double scale_factor){{{1*/ 476 void TriaVertexInput::Scale(double scale_factor){ 477 478 int i; 479 const int numgrids=3; 480 481 for(i=0;i<numgrids;i++)values[i]=values[i]*scale_factor; 482 } 483 /*}}}*/ -
issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
r4043 r4047 80 80 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss); 81 81 void SquareMin(double* psquaremin, bool process_units,Parameters* parameters); 82 void Scale(double scale_factor); 82 83 /*}}}*/ 83 84 -
issm/trunk/src/c/solutions/control_core.cpp
r4043 r4047 3 3 */ 4 4 5 #include "../toolkits/toolkits.h" 6 #include "../objects/objects.h" 7 #include "../shared/shared.h" 8 #include "../EnumDefinitions/EnumDefinitions.h" 5 9 #include "./solutions.h" 6 10 #include "../modules/modules.h" 7 #include "../ EnumDefinitions/EnumDefinitions.h"11 #include "../include/include.h" 8 12 #include "../solvers/solvers.h" 9 13 10 Results* control_core(Model* model){ 11 12 extern int my_rank; 13 14 /*fem model: */ 15 FemModel* fem_model=NULL; 16 17 /*output: */ 18 Results* results=NULL; 19 20 /*Intermediary: */ 21 Results* diagnostic_results=NULL; 22 Results* gradjcompute_results=NULL; 23 Results* steadystate_results=NULL; 14 void control_core(FemModel* femmodel){ 15 24 16 Vec u_g=NULL; 25 17 Vec t_g=NULL; … … 29 21 double* fit=NULL; 30 22 double* optscal=NULL; 31 int gsize;32 23 double* maxiter=NULL; 33 24 double* cm_jump=NULL; … … 56 47 int numberofnodes; 57 48 58 //initialize results59 results=new Results();60 61 49 /*Process models*/ 62 ControlInitialization(model); 63 fem_model=model->GetActiveFormulation(); 50 ControlInitialization(femmodel); 64 51 65 52 /*Recover parameters used throughout the solution:*/ 66 model->FindParam(&nsteps,NStepsEnum); 67 model->FindParam(&control_type,ControlTypeEnum); 68 model->FindParam(&fit,NULL,NULL,FitEnum); 69 model->FindParam(&optscal,NULL,NULL,OptScalEnum); 70 model->FindParam(&maxiter,NULL,NULL,MaxIterEnum); 71 model->FindParam(&cm_jump,NULL,NULL,CmJumpEnum); 72 model->FindParam(&eps_cm,EpsCmEnum); 73 model->FindParam(&tolx,TolXEnum); 74 model->FindParam(&cm_min,CmMinEnum); 75 model->FindParam(&cm_max,CmMaxEnum); 76 model->FindParam(&cm_gradient,CmGradientEnum); 77 model->FindParam(¶m_g,NULL,NULL,ControlParameterEnum); 78 model->FindParam(&analysis_type,AnalysisTypeEnum); 79 model->FindParam(&sub_analysis_type,SubAnalysisTypeEnum); 80 model->FindParam(&numberofnodes,NumberOfNodesEnum); 81 model->FindParam(&control_steady,ControlSteadyEnum); 82 gsize=fem_model->nodes->NumberOfDofs(); 53 femmodel->parameters->FindParam(&nsteps,NStepsEnum); 54 femmodel->parameters->FindParam(&control_type,ControlTypeEnum); 55 femmodel->parameters->FindParam(&fit,NULL,NULL,FitEnum); 56 femmodel->parameters->FindParam(&optscal,NULL,NULL,OptScalEnum); 57 femmodel->parameters->FindParam(&maxiter,NULL,NULL,MaxIterEnum); 58 femmodel->parameters->FindParam(&cm_jump,NULL,NULL,CmJumpEnum); 59 femmodel->parameters->FindParam(&eps_cm,EpsCmEnum); 60 femmodel->parameters->FindParam(&tolx,TolXEnum); 61 femmodel->parameters->FindParam(&cm_min,CmMinEnum); 62 femmodel->parameters->FindParam(&cm_max,CmMaxEnum); 63 femmodel->parameters->FindParam(&cm_gradient,CmGradientEnum); 64 femmodel->parameters->FindParam(¶m_g,NULL,NULL,ControlParameterEnum); 65 femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum); 66 femmodel->parameters->FindParam(&sub_analysis_type,SubAnalysisTypeEnum); 67 femmodel->parameters->FindParam(&numberofnodes,NumberOfNodesEnum); 68 femmodel->parameters->FindParam(&control_steady,ControlSteadyEnum); 83 69 84 70 /*Initialize misfit: */ … … 89 75 90 76 _printf_("\n%s%i%s%i\n"," control method step ",n+1,"/",nsteps); 91 model->UpdateInputsFromVector(param_g,control_type,VertexEnum);92 model->UpdateInputsFromConstant(fit[n],FitEnum);77 inputs->Add(control_type,param_g,1,numberofnodes); 78 femmodel->UpdateInputsFromConstant(fit[n],FitEnum); 93 79 94 80 /*In case we are running a steady state control method, compute new temperature field using new parameter 95 81 * distribution: */ 96 if (control_steady){ 97 steadystate_results= steadystate_core(model); 98 VecFree(&t_g); steadystate_results->FindResult(&t_g,"t_g"); 99 delete steadystate_results; 100 model->UpdateInputsFromVector(t_g,TemperatureEnum,VertexEnum); 101 } 82 if (control_steady) steadystate_core(model); 102 83 103 _printf_("%s\n"," computing gradJ..."); 104 gradjcompute_results= gradjcompute_core(model); 105 gradjcompute_results->FindResult(&grad_g,"grad_g"); 106 delete gradjcompute_results; 84 if(verbose)_printf_("%s\n"," computing gradJ..."); 85 gradient_core(femmodel); 107 86 108 87 /*Return gradient if asked: */ 109 88 if (cm_gradient){ 110 111 /*Plug results into output dataset: */ 112 results->AddObject(new Result(results->Size()+1,0,1,"grad_g",grad_g)); 113 results->AddObject(new Result(results->Size()+1,0,1,"analysis_type",EnumAsString(analysis_type))); 114 115 /*Free ressources: */ 116 xfree((void**)&control_type); 117 xfree((void**)&fit); 118 xfree((void**)&optscal); 119 xfree((void**)&maxiter); 120 xfree((void**)&cm_jump); 121 xfree((void**)&grad_g_double); 122 xfree((void**)¶m_g); 123 VecFree(&u_g); 124 VecFree(&t_g); 125 VecFree(&m_g); 126 xfree((void**)&J); 127 return results; 89 /*Transfer gradient from input to results: */ 90 InputToResultx(femodel->elements,femodel->nodes,femodel->vertices,femodel->loads,femodel->materials,femodel->parameters,GradientEnum); 91 return; 128 92 } 129 93 -
issm/trunk/src/c/solutions/diagnostic_core.cpp
r4046 r4047 68 68 //"recondition" pressure computed previously: 69 69 DuplicateInputx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum,PressureStokesEnum); 70 ScaleInputx(femm model,PressureStokesEnum,1.0/stokesreconditioning);70 ScaleInputx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureStokesEnum,1.0/stokesreconditioning); 71 71 72 72 if(verbose)_printf_("%s\n"," update boundary conditions for stokes using velocities previously computed..."); … … 74 74 75 75 if(verbose)_printf_("%s\n"," computing stokes velocities and pressure ..."); 76 solver_diagnostic_nonlinear(NULL,NULL,NULL,NULL,fem _ds,DiagnosticAnalysisEnum,StokesAnalysisEnum);76 solver_diagnostic_nonlinear(NULL,NULL,NULL,NULL,femmodel,DiagnosticAnalysisEnum,StokesAnalysisEnum); 77 77 } 78 78 } -
issm/trunk/src/c/solutions/solutions.h
r4043 r4047 13 13 14 14 /*cores: */ 15 Results* gradjcompute_core(FemModel* model);16 void diagnostic_core(FemModel* model);17 15 Results* prognostic_core(FemModel* model); 18 16 Results* prognostic2_core(FemModel* model); … … 26 24 Results* transient_core_2d(FemModel* model); 27 25 Results* transient_core_3d(FemModel* model); 28 Results* thermal_core(FemModel* model); 26 void adjoint_core(FemModel* model); 27 void gradient_core(FemModel* model); 28 void diagnostic_core(FemModel* model); 29 void thermal_core(FemModel* model); 29 30 void surfaceslope_core(FemModel* femmodel); 30 31 void bedslope_core(FemModel* femmodel); -
issm/trunk/src/c/solvers/solvers.h
r4029 r4047 15 15 void solver_diagnostic_nonlinear(Vec* pug,Mat* pK_ff0,Mat* pK_fs0, FemModel* fem,bool conserve_loads,int analysis_type,int sub_analysis_type); 16 16 void solver_linear(Vec* pug, FemModel* femmodel,int analysis_type,int sub_analysis_type); 17 void solver_adjoint(Vec* pug, FemModel* femmodel,int analysis_type,int sub_analysis_type); 17 18 18 19 -
issm/trunk/src/m/enum/ConnectivityEnum.m
r4043 r4047 9 9 % macro=ConnectivityEnum() 10 10 11 macro=20 1;11 macro=202; -
issm/trunk/src/m/enum/ControlParameterEnum.m
r4043 r4047 9 9 % macro=ControlParameterEnum() 10 10 11 macro=20 2;11 macro=203; -
issm/trunk/src/m/enum/ControlSteadyEnum.m
r4043 r4047 9 9 % macro=ControlSteadyEnum() 10 10 11 macro=20 3;11 macro=204; -
issm/trunk/src/m/enum/DakotaParameterEnum.m
r4043 r4047 9 9 % macro=DakotaParameterEnum() 10 10 11 macro=20 4;11 macro=205; -
issm/trunk/src/m/enum/DimEnum.m
r4043 r4047 9 9 % macro=DimEnum() 10 10 11 macro=20 5;11 macro=206; -
issm/trunk/src/m/enum/EnumAsString.m
r4043 r4047 168 168 case PressureOldEnum(), string='PressureOld'; return 169 169 case QmuPressureEnum(), string='QmuPressure'; return 170 case StokesPressureEnum(), string='StokesPressure'; return170 case PressureStokesEnum(), string='PressureStokes'; return 171 171 case ResetPenaltiesEnum(), string='ResetPenalties'; return 172 172 case RheologyBEnum(), string='RheologyB'; return … … 212 212 case CmMaxEnum(), string='CmMax'; return 213 213 case CmMinEnum(), string='CmMin'; return 214 case GradientEnum(), string='Gradient'; return 214 215 case ConnectivityEnum(), string='Connectivity'; return 215 216 case ControlParameterEnum(), string='ControlParameter'; return -
issm/trunk/src/m/enum/EpsAbsEnum.m
r4043 r4047 9 9 % macro=EpsAbsEnum() 10 10 11 macro=20 6;11 macro=207; -
issm/trunk/src/m/enum/EpsCmEnum.m
r4043 r4047 9 9 % macro=EpsCmEnum() 10 10 11 macro=20 7;11 macro=208; -
issm/trunk/src/m/enum/EpsRelEnum.m
r4043 r4047 9 9 % macro=EpsRelEnum() 10 10 11 macro=20 8;11 macro=209; -
issm/trunk/src/m/enum/EpsResEnum.m
r4043 r4047 9 9 % macro=EpsResEnum() 10 10 11 macro=2 09;11 macro=210; -
issm/trunk/src/m/enum/ExtrudeParamEnum.m
r4043 r4047 9 9 % macro=ExtrudeParamEnum() 10 10 11 macro=21 0;11 macro=211; -
issm/trunk/src/m/enum/HeatCapacityEnum.m
r4043 r4047 9 9 % macro=HeatCapacityEnum() 10 10 11 macro=21 1;11 macro=212; -
issm/trunk/src/m/enum/IsHutterEnum.m
r4043 r4047 9 9 % macro=IsHutterEnum() 10 10 11 macro=21 2;11 macro=213; -
issm/trunk/src/m/enum/IsMacAyealPattynEnum.m
r4043 r4047 9 9 % macro=IsMacAyealPattynEnum() 10 10 11 macro=21 3;11 macro=214; -
issm/trunk/src/m/enum/IsStokesEnum.m
r4043 r4047 9 9 % macro=IsStokesEnum() 10 10 11 macro=21 4;11 macro=215; -
issm/trunk/src/m/enum/LatentHeatEnum.m
r4043 r4047 9 9 % macro=LatentHeatEnum() 10 10 11 macro=21 5;11 macro=216; -
issm/trunk/src/m/enum/LowmemEnum.m
r4043 r4047 9 9 % macro=LowmemEnum() 10 10 11 macro=21 6;11 macro=217; -
issm/trunk/src/m/enum/MaxIterEnum.m
r4043 r4047 9 9 % macro=MaxIterEnum() 10 10 11 macro=21 7;11 macro=218; -
issm/trunk/src/m/enum/MaxNonlinearIterationsEnum.m
r4043 r4047 9 9 % macro=MaxNonlinearIterationsEnum() 10 10 11 macro=21 8;11 macro=219; -
issm/trunk/src/m/enum/MeltingPointEnum.m
r4043 r4047 9 9 % macro=MeltingPointEnum() 10 10 11 macro=2 19;11 macro=220; -
issm/trunk/src/m/enum/MinMechanicalConstraintsEnum.m
r4043 r4047 9 9 % macro=MinMechanicalConstraintsEnum() 10 10 11 macro=22 0;11 macro=221; -
issm/trunk/src/m/enum/MinThermalConstraintsEnum.m
r4043 r4047 9 9 % macro=MinThermalConstraintsEnum() 10 10 11 macro=22 1;11 macro=222; -
issm/trunk/src/m/enum/NStepsEnum.m
r4043 r4047 9 9 % macro=NStepsEnum() 10 10 11 macro=22 2;11 macro=223; -
issm/trunk/src/m/enum/NdtEnum.m
r4043 r4047 9 9 % macro=NdtEnum() 10 10 11 macro=22 3;11 macro=224; -
issm/trunk/src/m/enum/NumOutputEnum.m
r4043 r4047 9 9 % macro=NumOutputEnum() 10 10 11 macro=22 4;11 macro=225; -
issm/trunk/src/m/enum/NumRiftsEnum.m
r4043 r4047 9 9 % macro=NumRiftsEnum() 10 10 11 macro=22 5;11 macro=226; -
issm/trunk/src/m/enum/NumberOfDofsPerNodeEnum.m
r4043 r4047 9 9 % macro=NumberOfDofsPerNodeEnum() 10 10 11 macro=22 6;11 macro=227; -
issm/trunk/src/m/enum/NumberOfElementsEnum.m
r4043 r4047 9 9 % macro=NumberOfElementsEnum() 10 10 11 macro=22 7;11 macro=228; -
issm/trunk/src/m/enum/NumberOfNodesEnum.m
r4043 r4047 9 9 % macro=NumberOfNodesEnum() 10 10 11 macro=22 8;11 macro=229; -
issm/trunk/src/m/enum/NumberOfVerticesEnum.m
r4043 r4047 9 9 % macro=NumberOfVerticesEnum() 10 10 11 macro=2 29;11 macro=230; -
issm/trunk/src/m/enum/OptScalEnum.m
r4043 r4047 9 9 % macro=OptScalEnum() 10 10 11 macro=23 0;11 macro=231; -
issm/trunk/src/m/enum/OutputFileNameEnum.m
r4043 r4047 9 9 % macro=OutputFileNameEnum() 10 10 11 macro=23 1;11 macro=232; -
issm/trunk/src/m/enum/ParameterOutputEnum.m
r4043 r4047 9 9 % macro=ParameterOutputEnum() 10 10 11 macro=23 2;11 macro=233; -
issm/trunk/src/m/enum/PenaltyMeltingEnum.m
r4043 r4047 9 9 % macro=PenaltyMeltingEnum() 10 10 11 macro=23 3;11 macro=234; -
issm/trunk/src/m/enum/QmuAnalysisEnum.m
r4043 r4047 9 9 % macro=QmuAnalysisEnum() 10 10 11 macro=23 4;11 macro=235; -
issm/trunk/src/m/enum/QmuErrNameEnum.m
r4043 r4047 9 9 % macro=QmuErrNameEnum() 10 10 11 macro=23 5;11 macro=236; -
issm/trunk/src/m/enum/QmuInNameEnum.m
r4043 r4047 9 9 % macro=QmuInNameEnum() 10 10 11 macro=23 6;11 macro=237; -
issm/trunk/src/m/enum/QmuMassFluxSegmentsEnum.m
r4043 r4047 9 9 % macro=QmuMassFluxSegmentsEnum() 10 10 11 macro=23 7;11 macro=238; -
issm/trunk/src/m/enum/QmuNPartEnum.m
r4043 r4047 9 9 % macro=QmuNPartEnum() 10 10 11 macro=23 8;11 macro=239; -
issm/trunk/src/m/enum/QmuOutNameEnum.m
r4043 r4047 9 9 % macro=QmuOutNameEnum() 10 10 11 macro=2 39;11 macro=240; -
issm/trunk/src/m/enum/QmuPartEnum.m
r4043 r4047 9 9 % macro=QmuPartEnum() 10 10 11 macro=24 0;11 macro=241; -
issm/trunk/src/m/enum/ResponseDescriptorsEnum.m
r4043 r4047 9 9 % macro=ResponseDescriptorsEnum() 10 10 11 macro=24 1;11 macro=242; -
issm/trunk/src/m/enum/SolverStringEnum.m
r4043 r4047 9 9 % macro=SolverStringEnum() 10 10 11 macro=24 2;11 macro=243; -
issm/trunk/src/m/enum/SparsityEnum.m
r4043 r4047 9 9 % macro=SparsityEnum() 10 10 11 macro=24 3;11 macro=244; -
issm/trunk/src/m/enum/StringAsEnum.m
r4043 r4047 166 166 elseif (strcmpi(name,'PressureOld')), enum=PressureOldEnum(); return 167 167 elseif (strcmpi(name,'QmuPressure')), enum=QmuPressureEnum(); return 168 elseif (strcmpi(name,' StokesPressure')), enum=StokesPressureEnum(); return168 elseif (strcmpi(name,'PressureStokes')), enum=PressureStokesEnum(); return 169 169 elseif (strcmpi(name,'ResetPenalties')), enum=ResetPenaltiesEnum(); return 170 170 elseif (strcmpi(name,'RheologyB')), enum=RheologyBEnum(); return … … 210 210 elseif (strcmpi(name,'CmMax')), enum=CmMaxEnum(); return 211 211 elseif (strcmpi(name,'CmMin')), enum=CmMinEnum(); return 212 elseif (strcmpi(name,'Gradient')), enum=GradientEnum(); return 212 213 elseif (strcmpi(name,'Connectivity')), enum=ConnectivityEnum(); return 213 214 elseif (strcmpi(name,'ControlParameter')), enum=ControlParameterEnum(); return -
issm/trunk/src/m/enum/TolXEnum.m
r4043 r4047 9 9 % macro=TolXEnum() 10 10 11 macro=24 4;11 macro=245; -
issm/trunk/src/m/enum/VariableDescriptorsEnum.m
r4043 r4047 9 9 % macro=VariableDescriptorsEnum() 10 10 11 macro=24 5;11 macro=246; -
issm/trunk/src/m/enum/VerboseEnum.m
r4043 r4047 9 9 % macro=VerboseEnum() 10 10 11 macro=24 6;11 macro=247; -
issm/trunk/src/m/enum/WaitOnLockEnum.m
r4043 r4047 9 9 % macro=WaitOnLockEnum() 10 10 11 macro=24 7;11 macro=248; -
issm/trunk/src/m/enum/YtsEnum.m
r4043 r4047 9 9 % macro=YtsEnum() 10 10 11 macro=24 8;11 macro=249;
Note:
See TracChangeset
for help on using the changeset viewer.