source: issm/oecreview/Archive/21724-22754/ISSM-22422-22423.diff@ 22755

Last change on this file since 22755 was 22755, checked in by Mathieu Morlighem, 7 years ago

CHG: added 21724-22754

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 :*/
     34Numberedcostfunction::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/*}}}*/
     43Numberedcostfunction::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/*}}}*/
     59Numberedcostfunction::~Numberedcostfunction(){/*{{{*/
     60        xDelete<int>(this->cost_functions_list);
     61        if(this->name)xDelete(this->name);
     62}
     63/*}}}*/
     64
     65/*Object virtual function resolutoin: */
     66Object* 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/*}}}*/
     71void Numberedcostfunction::DeepEcho(void){/*{{{*/
     72        this->Echo();
     73}
     74/*}}}*/
     75void 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/*}}}*/
     85int Numberedcostfunction::Id(void){/*{{{*/
     86        return -1;
     87}
     88/*}}}*/
     89void Numberedcostfunction::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
     90        _error_("not implemented yet!");
     91}
     92/*}}}*/
     93int Numberedcostfunction::ObjectEnum(void){/*{{{*/
     94        return NumberedcostfunctionEnum;
     95}
     96/*}}}*/
     97
     98/*Definition virtual function resolutoin: */
     99int Numberedcostfunction::DefinitionEnum(){/*{{{*/
     100        return this->definitionenum;
     101}
     102/*}}}*/
     103char* 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/*}}}*/
     111IssmDouble 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.