source:
issm/oecreview/Archive/21724-22754/ISSM-22422-22423.diff@
22755
Last change on this file since 22755 was 22755, checked in by , 7 years ago | |
---|---|
File size: 6.1 KB |
-
../trunk-jpl/src/c/classes/Numberedcostfunction.cpp
1 /*!\file Numberedcostfunction.cpp 2 * \brief: implementation for the Numberedcostfunction object 3 */ 4 /*Include files: {{{*/ 5 #ifdef HAVE_CONFIG_H 6 #include <config.h> 7 #else 8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" 9 #endif 10 11 12 /*Headers:*/ 13 //#include "./Definition.h" 14 //#include "../datastructures/datastructures.h" 15 #include "./classes.h" 16 #include "./Elements/Element.h" 17 #include "./Elements/Elements.h" 18 #include "./FemModel.h" 19 #include "./ExternalResults/ExternalResult.h" 20 #include "./ExternalResults/Results.h" 21 #include "../modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h" 22 #include "../modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h" 23 #include "../modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h" 24 #include "../modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h" 25 #include "../modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h" 26 #include "../modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h" 27 #include "../modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h" 28 #include "../modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h" 29 #include "../modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h" 30 31 /*}}}*/ 32 33 /*Numberedcostfunction constructors, destructors :*/ 34 Numberedcostfunction::Numberedcostfunction(){/*{{{*/ 35 36 this->definitionenum = -1; 37 this->name = NULL; 38 this->number_cost_functions = -1; 39 this->cost_functions_list = NULL; 40 41 } 42 /*}}}*/ 43 Numberedcostfunction::Numberedcostfunction(char* in_name, int in_definitionenum,int number_cost_functions_in,int* cost_functions_list_in){/*{{{*/ 44 _assert_(number_cost_functions_in>0); 45 _assert_(cost_functions_list_in); 46 47 this->definitionenum=in_definitionenum; 48 this->name = xNew<char>(strlen(in_name)+1); 49 xMemCpy<char>(this->name,in_name,strlen(in_name)+1); 50 51 this->number_cost_functions = number_cost_functions_in; 52 this->cost_functions_list = xNew<int>(number_cost_functions_in); 53 54 for(int i=0;i<number_cost_functions_in;i++){ 55 this->cost_functions_list[i] = cost_functions_list_in[i]; 56 } 57 } 58 /*}}}*/ 59 Numberedcostfunction::~Numberedcostfunction(){/*{{{*/ 60 xDelete<int>(this->cost_functions_list); 61 if(this->name)xDelete(this->name); 62 } 63 /*}}}*/ 64 65 /*Object virtual function resolutoin: */ 66 Object* Numberedcostfunction::copy() {/*{{{*/ 67 Numberedcostfunction* out = new Numberedcostfunction(this->name,this->definitionenum,this->number_cost_functions,this->cost_functions_list); 68 return (Object*)out; 69 } 70 /*}}}*/ 71 void Numberedcostfunction::DeepEcho(void){/*{{{*/ 72 this->Echo(); 73 } 74 /*}}}*/ 75 void Numberedcostfunction::Echo(void){/*{{{*/ 76 _printf_(" Numberedcostfunction: " << this->name << " " << this->definitionenum << "\n"); 77 _printf_(" number_cost_functions: "<<this->number_cost_functions<<"\n"); 78 _printf_(" "); 79 for(int i=0;i<this->number_cost_functions;i++){ 80 _printf_(this->cost_functions_list[i]<< " "); 81 } 82 _printf_("\n"); 83 } 84 /*}}}*/ 85 int Numberedcostfunction::Id(void){/*{{{*/ 86 return -1; 87 } 88 /*}}}*/ 89 void Numberedcostfunction::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/ 90 _error_("not implemented yet!"); 91 } 92 /*}}}*/ 93 int Numberedcostfunction::ObjectEnum(void){/*{{{*/ 94 return NumberedcostfunctionEnum; 95 } 96 /*}}}*/ 97 98 /*Definition virtual function resolutoin: */ 99 int Numberedcostfunction::DefinitionEnum(){/*{{{*/ 100 return this->definitionenum; 101 } 102 /*}}}*/ 103 char* Numberedcostfunction::Name(){/*{{{*/ 104 105 char* name2=xNew<char>(strlen(this->name)+1); 106 xMemCpy(name2,this->name,strlen(this->name)+1); 107 108 return name2; 109 } 110 /*}}}*/ 111 IssmDouble Numberedcostfunction::Response(FemModel* femmodel){/*{{{*/ 112 113 _assert_(number_cost_functions>0 && number_cost_functions<1e3); 114 115 /*output:*/ 116 IssmDouble value; 117 IssmDouble value_sum = 0.; 118 119 /*Scalar control output*/ 120 for(int i=0;i<this->number_cost_functions;i++){ 121 switch(this->cost_functions_list[i]){ 122 case SurfaceAbsVelMisfitEnum: 123 SurfaceAbsVelMisfitx(&value,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 124 break; 125 case SurfaceRelVelMisfitEnum: 126 SurfaceRelVelMisfitx(&value, femmodel->elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel->parameters); 127 break; 128 case SurfaceLogVelMisfitEnum: 129 SurfaceLogVelMisfitx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel->parameters); 130 break; 131 case SurfaceLogVxVyMisfitEnum: 132 SurfaceLogVxVyMisfitx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel->parameters); 133 break; 134 case ThicknessAbsMisfitEnum: 135 ThicknessAbsMisfitx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 136 break; 137 case ThicknessAlongGradientEnum: 138 ThicknessAlongGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 139 break; 140 case ThicknessAcrossGradientEnum: 141 ThicknessAcrossGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 142 break; 143 case RheologyBbarAbsGradientEnum: 144 RheologyBbarAbsGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 145 break; 146 case DragCoefficientAbsGradientEnum: 147 DragCoefficientAbsGradientx(&value,femmodel-> elements,femmodel->nodes,femmodel-> vertices,femmodel-> loads,femmodel-> materials,femmodel-> parameters); 148 break; 149 default: 150 _error_("not supported"); 151 } 152 value_sum += value; 153 } 154 155 /*done:*/ 156 return value_sum; 157 } 158 /*}}}*/ 159
Note:
See TracBrowser
for help on using the repository browser.