Changeset 5578


Ignore:
Timestamp:
08/25/10 15:56:38 (15 years ago)
Author:
Mathieu Morlighem
Message:

Added a module to add noise on any input (might be useful for control methods)

Location:
issm/trunk/src/c
Files:
3 added
19 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Makefile.am

    r5574 r5578  
    469469                                        ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h\
    470470                                        ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp\
     471                                        ./modules/InputArtificialNoisex/InputArtificialNoisex.h\
     472                                        ./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
    471473                                        ./modules/UpdateGeometryx/UpdateGeometryx.h\
    472474                                        ./modules/UpdateGeometryx/UpdateGeometryx.cpp\
     
    10201022                                        ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h\
    10211023                                        ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp\
     1024                                        ./modules/InputArtificialNoisex/InputArtificialNoisex.h\
     1025                                        ./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
    10221026                                        ./modules/UpdateGeometryx/UpdateGeometryx.h\
    10231027                                        ./modules/UpdateGeometryx/UpdateGeometryx.cpp\
  • issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r5196 r5578  
    4343        parameters->AddObject(new DoubleParam(EpsRelEnum,iomodel->eps_rel));
    4444        parameters->AddObject(new DoubleParam(EpsAbsEnum,iomodel->eps_abs));
    45         parameters->AddObject(new IntParam(MaxNonlinearIterationsEnum,iomodel->max_nonlinear_iterations));
     45        parameters->AddObject(new IntParam(MaxNonlinearIterationsEnum,(IssmInt)iomodel->max_nonlinear_iterations));
    4646        parameters->AddObject(new DoubleParam(EpsVelEnum,iomodel->epsvel));
    4747        parameters->AddObject(new DoubleParam(YtsEnum,iomodel->yts));
  • issm/trunk/src/c/modules/modules.h

    r5478 r5578  
    4242#include "./InputUpdateFromVectorx/InputUpdateFromVectorx.h"
    4343#include "./InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
     44#include "./InputArtificialNoisex/InputArtificialNoisex.h"
    4445#include "./MassFluxx/MassFluxx.h"
    4546#include "./MaxAbsVxx/MaxAbsVxx.h"
  • issm/trunk/src/c/objects/Elements/Element.h

    r5518 r5578  
    7777                virtual void   GetVectorFromInputs(Vec vector,int NameEnum)=0;
    7878                virtual void   InputControlUpdate(double scalar,bool save_parameter)=0;
     79                virtual void   InputArtificialNoise(int enum_type,double min,double max)=0;
    7980                virtual bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
    8081                virtual void   AverageOntoPartition(Vec partition_contributions,Vec partition_areas,double* vertex_response,double* qmu_part)=0;
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r5547 r5578  
    12551255        if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
    12561256
     1257}
     1258/*}}}*/
     1259/*FUNCTION Penta::InputArtificialNoise{{{1*/
     1260void  Penta::InputArtificialNoise(int enum_type,double min,double max){
     1261
     1262        Input* input=NULL;
     1263
     1264        /*Make a copy of the original input: */
     1265        input=(Input*)this->inputs->GetInput(enum_type);
     1266        if(!input)ISSMERROR(" could not find old input with enum: %s",EnumToString(enum_type));
     1267
     1268        /*ArtificialNoise: */
     1269        input->ArtificialNoise(min,max);
    12571270}
    12581271/*}}}*/
  • issm/trunk/src/c/objects/Elements/Penta.h

    r5518 r5578  
    9191                void   GradjDrag(Vec gradient);
    9292                void   InputControlUpdate(double scalar,bool save_parameter);
     93                void   InputArtificialNoise(int enum_type,double min, double max);
    9394                bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    9495                void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r5571 r5578  
    15261526        /*Scale: */
    15271527        input->Scale(scale_factor);
     1528}
     1529/*}}}*/
     1530/*FUNCTION Tria::InputArtificialNoise{{{1*/
     1531void  Tria::InputArtificialNoise(int enum_type,double min,double max){
     1532
     1533        Input* input=NULL;
     1534
     1535        /*Make a copy of the original input: */
     1536        input=(Input*)this->inputs->GetInput(enum_type);
     1537        if(!input)ISSMERROR(" could not find old input with enum: %s",EnumToString(enum_type));
     1538
     1539        /*ArtificialNoise: */
     1540        input->ArtificialNoise(min,max);
    15281541}
    15291542/*}}}*/
  • issm/trunk/src/c/objects/Elements/Tria.h

    r5518 r5578  
    8888                void   GradjDhDt(Vec gradient);
    8989                void   InputControlUpdate(double scalar,bool save_parameter);
     90                void   InputArtificialNoise(int enum_type,double min, double max);
    9091                bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
    9192                void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
  • issm/trunk/src/c/objects/Inputs/BoolInput.h

    r5513 r5578  
    6262                double InfinityNorm(void){ISSMERROR("InfinityNorm not implemented for booleans");};
    6363                void Scale(double scale_factor);
     64                void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
    6465                void AXPY(Input* xinput,double scalar);
    6566                void Constrain(double cm_min, double cm_max);
  • issm/trunk/src/c/objects/Inputs/DoubleInput.h

    r5513 r5578  
    6060                void ConstrainMin(double minimum);
    6161                void Scale(double scale_factor);
     62                void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
    6263                void AXPY(Input* xinput,double scalar);
    6364                void Constrain(double cm_min, double cm_max);
  • issm/trunk/src/c/objects/Inputs/Input.h

    r5513 r5578  
    4141                virtual double InfinityNorm(void)=0;
    4242                virtual void Scale(double scale_factor)=0;
     43                virtual void ArtificialNoise(double min,double max)=0;
    4344                virtual void AXPY(Input* xinput,double scalar)=0;
    4445                virtual void Constrain(double cm_min, double cm_max)=0;
  • issm/trunk/src/c/objects/Inputs/IntInput.h

    r5513 r5578  
    6161                void ConstrainMin(double minimum){ISSMERROR("not implemented yet");};
    6262                void Scale(double scale_factor);
     63                void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
    6364                void AXPY(Input* xinput,double scalar);
    6465                void Constrain(double cm_min, double cm_max);
  • issm/trunk/src/c/objects/Inputs/PentaVertexInput.h

    r5513 r5578  
    6262                void ConstrainMin(double minimum);
    6363                void Scale(double scale_factor);
     64                void ArtificialNoise(double min,double max){ISSMERROR("not implemented yet");};
    6465                void AXPY(Input* xinput,double scalar);
    6566                void Constrain(double cm_min, double cm_max);
  • issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp

    r5529 r5578  
    310310}
    311311/*}}}*/
     312/*FUNCTION TriaVertexInput::ArtificialNoise{{{1*/
     313void TriaVertexInput::ArtificialNoise(double min,double max){
     314
     315        int i;
     316        const int numgrids=3;
     317        double noise;
     318
     319        /*Compute random number between bounds:
     320         * rand() outputs an integer in [0 RAND_MAX]
     321         * (double)rand()/RAND_MAX is in [0 1]
     322         */
     323         noise=min+(max-min)*(double)rand()/RAND_MAX;
     324
     325        for(i=0;i<numgrids;i++)values[i]=values[i]+noise;
     326}
     327/*}}}*/
    312328/*FUNCTION TriaVertexInput::AXPY{{{1*/
    313329void TriaVertexInput::AXPY(Input* xinput,double scalar){
  • issm/trunk/src/c/objects/Inputs/TriaVertexInput.h

    r5513 r5578  
    6262                void ConstrainMin(double minimum);
    6363                void Scale(double scale_factor);
     64                void ArtificialNoise(double min,double max);
    6465                void AXPY(Input* xinput,double scalar);
    6566                void Constrain(double cm_min, double cm_max);
  • issm/trunk/src/c/objects/Loads/Numericalflux.cpp

    r5456 r5578  
    472472               
    473473                UdotN=vx*normal[0]+vy*normal[1];
    474                 if (fabs(UdotN)<1.0e-9 && analysis_type==BalancedthicknessAnalysisEnum) printf("Edge number %i has a flux very small (u.n = %g ), which could lead to unaccurate results\n",id,UdotN);
     474        //      if (fabs(UdotN)<1.0e-9 && analysis_type==BalancedthicknessAnalysisEnum) printf("Edge number %i has a flux very small (u.n = %g ), which could lead to unaccurate results\n",id,UdotN);
    475475
    476476                /*Get L and B: */
  • issm/trunk/src/c/objects/Node.cpp

    r5557 r5578  
    8383        if (iomodel->gridoniceshelf) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->gridoniceshelf[io_index]));
    8484        if (iomodel->gridonicesheet) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->gridonicesheet[io_index]));
    85         if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,iomodel->numbernodetoelementconnectivity[io_index]));
    86         if (analysis_type==DiagnosticHorizAnalysisEnum) this->inputs->AddInput(new IntInput(ApproximationEnum,iomodel->vertices_type[io_index]));
     85        if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,(IssmInt)iomodel->numbernodetoelementconnectivity[io_index]));
     86        if (analysis_type==DiagnosticHorizAnalysisEnum) this->inputs->AddInput(new IntInput(ApproximationEnum,(IssmInt)iomodel->vertices_type[io_index]));
    8787
    8888        /*set single point constraints: */
  • issm/trunk/src/c/objects/objects.h

    r5143 r5578  
    102102#include "./Bamg/AdjacentTriangle.h"
    103103#include "./Bamg/Edge.h"
    104 #include "./Bamg/GeometricalVertex.h"
    105 #include "./Bamg/GeometricalEdge.h"
     104#include "./Bamg/GeomVertex.h"
     105#include "./Bamg/GeomEdge.h"
    106106#include "./Bamg/Curve.h"
    107107#include "./Bamg/Triangle.h"
    108108#include "./Bamg/ListofIntersectionTriangles.h"
    109 #include "./Bamg/GeometricalSubDomain.h"
     109#include "./Bamg/GeomSubDomain.h"
    110110#include "./Bamg/SubDomain.h"
    111111#include "./Bamg/VertexOnGeom.h"
  • issm/trunk/src/c/solutions/gradient_core.cpp

    r5378 r5578  
    5353
    5454        /*plug back into inputs: */
    55         InputUpdateFromVectorx( femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,gradient,GradientEnum,VertexEnum);
    56         InputUpdateFromVectorx( femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,old_gradient,OldGradientEnum,VertexEnum);
     55        InputUpdateFromVectorx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,gradient,GradientEnum,VertexEnum);
     56        InputUpdateFromVectorx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,old_gradient,OldGradientEnum,VertexEnum);
     57        //InputArtificialNoisex(  femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,GradientEnum,-0.5,0.5);
    5758
    5859        /*Free ressources and return:*/
Note: See TracChangeset for help on using the changeset viewer.