Changeset 14807


Ignore:
Timestamp:
04/30/13 10:00:25 (12 years ago)
Author:
Eric.Larour
Message:

CHG: gia_core now return W and dW/dt
Added runtime controls for output_rates and cross_section_shape, which map into irate and iedge in naruse.

Location:
issm/trunk-jpl/src
Files:
3 added
18 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r14784 r14807  
    477477        StressTensoryzEnum,
    478478        StressTensorzzEnum,
     479        GiaOutputRatesEnum,
     480        GiaCrossSectionShapeEnum,
     481        GiadWdtEnum,
    479482        GiaWEnum,
    480483        /*}}}*/
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp

    r14713 r14807  
    15441544#endif
    15451545#ifdef _HAVE_GIA_
    1546 void FemModel::Deflection(Vector<IssmDouble>* wg,IssmDouble* x, IssmDouble* y){ /*{{{*/
     1546void FemModel::Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
    15471547
    15481548        int      i;
     
    15541554        for (i=0;i<elements->Size();i++){
    15551555                element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
    1556                 element->GiaDeflection(wg,x,y);
    1557         }
    1558 }
    1559 /*}}}*/
    1560 #endif
     1556                element->GiaDeflection(wg,dwgdt, x,y);
     1557        }
     1558}
     1559/*}}}*/
     1560#endif
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h

    r14648 r14807  
    9494                #endif
    9595                #ifdef _HAVE_GIA_
    96                 void Deflection(Vector<IssmDouble>* wg,IssmDouble* x, IssmDouble* y);
     96                void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
    9797                #endif
    9898                void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax);
  • TabularUnified issm/trunk-jpl/src/c/classes/GiaDeflectionCoreArgs.h

    r14746 r14807  
    2525        IssmDouble lithosphere_thickness;
    2626
     27        /*gia solution parameters: */
     28        int iedge;
     29        int irate;
     30
    2731        /*ice properties: */
    2832        IssmDouble rho_ice;
  • TabularUnified issm/trunk-jpl/src/c/classes/objects/Elements/Element.h

    r14796 r14807  
    101101
    102102                #ifdef _HAVE_GIA_
    103                 virtual void   GiaDeflection(Vector<IssmDouble>* wg,IssmDouble* x,IssmDouble* y)=0;
     103                virtual void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
    104104                #endif
    105105
  • TabularUnified issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp

    r14796 r14807  
    21712171                                name==QmuSurfaceEnum ||
    21722172                                name==QmuTemperatureEnum ||
    2173                                 name==QmuMeltingEnum
     2173                                name==QmuMeltingEnum ||
     2174                                name==GiaWEnum ||
     2175                                name==GiadWdtEnum
     2176
    21742177                                ) {
    21752178                return true;
     
    34983501#ifdef _HAVE_GIA_
    34993502/*FUNCTION Penta::GiaDeflection {{{*/
    3500 void Penta::GiaDeflection(Vector<IssmDouble>* wg,IssmDouble* x, IssmDouble* y){
     3503void Penta::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){
    35013504        _error_("GIA deflection not implemented yet!");
    35023505}
  • TabularUnified issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h

    r14796 r14807  
    144144
    145145                #ifdef _HAVE_GIA_
    146                 void   GiaDeflection(Vector<IssmDouble>* wg,IssmDouble* x,IssmDouble* y);
     146                void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
    147147                #endif
    148148
  • TabularUnified issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp

    r14804 r14807  
    20602060                                name==QmuSurfaceEnum ||
    20612061                                name==QmuTemperatureEnum ||
    2062                                 name==QmuMeltingEnum
     2062                                name==QmuMeltingEnum ||
     2063                                name==GiaWEnum ||
     2064                                name==GiadWdtEnum
    20632065                ){
    20642066                return true;
     
    30723074#ifdef _HAVE_GIA_
    30733075/*FUNCTION Tria::GiaDeflection {{{*/
    3074 void Tria::GiaDeflection(Vector<IssmDouble>* wg,IssmDouble* x, IssmDouble* y){
     3076void Tria::GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x, IssmDouble* y){
    30753077
    30763078        int i;
     
    30873089        int         numtimes;
    30883090        Input* thickness_input=NULL;
     3091
     3092        /*gia solution parameters:*/
     3093        int output_rates=0;
     3094        int cross_section_shape=0;
    30893095
    30903096        /*gia material parameters: */
     
    31023108        /*output: */
    31033109        IssmDouble  wi;
     3110        IssmDouble  dwidt;
    31043111
    31053112        /*arguments to GiaDeflectionCorex: */
     
    31083115        /*how many dofs are we working with here? */
    31093116        this->parameters->FindParam(&gsize,MeshNumberofverticesEnum);
     3117
     3118        /*recover gia solution parameters: */
     3119        this->parameters->FindParam(&output_rates,GiaOutputRatesEnum);
     3120        this->parameters->FindParam(&cross_section_shape,GiaCrossSectionShapeEnum);
    31103121
    31113122        /*what time is it? :*/
     
    31573168        arguments.rho_ice=rho_ice;
    31583169        arguments.idisk=this->id;
     3170        arguments.irate=output_rates;
     3171        arguments.iedge=cross_section_shape;
    31593172
    31603173        for(i=0;i<gsize;i++){
     
    31673180
    31683181                /*for this Tria, compute contribution to rebound at vertex i: */
    3169                 GiaDeflectionCorex(&wi,&arguments);
     3182                GiaDeflectionCorex(&wi,&dwidt,&arguments);
    31703183
    31713184                /*plug value into solution vector: */
    31723185                wg->SetValue(i,wi,ADD_VAL);
     3186                dwgdt->SetValue(i,dwidt,ADD_VAL);
    31733187
    31743188        }
  • TabularUnified issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h

    r14796 r14807  
    142142
    143143                #ifdef _HAVE_GIA_
    144                 void   GiaDeflection(Vector<IssmDouble>* wg,IssmDouble* x,IssmDouble* y);
     144                void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y);
    145145                void   InputUpdateFromSolutionGia(IssmDouble* solution);
    146146                #endif
  • TabularUnified issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r14784 r14807  
    468468                case StressTensoryzEnum : return "StressTensoryz";
    469469                case StressTensorzzEnum : return "StressTensorzz";
     470                case GiaOutputRatesEnum : return "GiaOutputRates";
     471                case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
     472                case GiadWdtEnum : return "GiadWdt";
    470473                case GiaWEnum : return "GiaW";
    471474                case P0Enum : return "P0";
  • TabularUnified issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp

    r14803 r14807  
    6868/*}}}*/
    6969     
    70 void GiaDeflectionCorex( IssmDouble* pwi, GiaDeflectionCoreArgs* arguments){
     70void GiaDeflectionCorex( IssmDouble* pwi, IssmDouble* pdwidt, GiaDeflectionCoreArgs* arguments){
    7171
    7272        /*output: */
    7373        IssmDouble wi=0;
     74        IssmDouble dwidt=0;
    7475       
    75         /*inputs: */
    76         int iedge=1; //c iedge ......... = 1 square-edged, = 2 elliptical disc x-section  (see naruse.f)
     76        /*inputs: {{{*/
     77        /*constant: */
    7778        int idisk=1; // disk #
    78         int irate=0; // =0 fetch w solution (m) only; =1 dw/dt (mm/yr) only
    7979
    80         /*intermediary: */
     80        /*coming from the model structure, runtime configurable:*/
     81        /*gia solution parameters: */
     82        int iedge=0;
     83        int irate=0;
    8184
    82         /*inputs: {{{*/
     85        /*gia inputs: */
    8386        IssmDouble ri; //radial distance from center of disk to vertex  i
    8487        IssmDouble re; //radius of disk
     
    121124        rho_ice=arguments->rho_ice;
    122125        disk_id=arguments->idisk;
     126        irate=arguments->irate;
     127        iedge=arguments->iedge;
     128
     129        //printf("%g %g %g %i %g %g %g %g %g %g %g %g %i\n", ri,re,current_he,numtimes,currenttime,lithosphere_shear_modulus,lithosphere_density,mantle_shear_modulus,mantle_viscosity, mantle_density,lithosphere_thickness,rho_ice,disk_id);
     130
    123131        /*}}}*/
    124132
     133        /*Modify inputs to match naruse code: */
     134        //from our model, irate comes in with values in [1,2], which maps into [0,1] in naruse:
     135        irate=irate-1;
     136
     137        /*Prepare block inputs for fortran distme and what0 routines of the naruse code: {{{*/
    125138        /*Now, let's set pset from the data that we got in input to GiaDeflectionCorex: */
    126139        blockp_.pset[0]=lithosphere_thickness;
     
    147160        /*radial distance of i-th element: */
    148161        blockrad_.distrad=ri/1000.0; // in km
     162        /*}}}*/
    149163
     164       
    150165        /*Call distme driver: */
    151166        distme_(&idisk,&iedge);
     
    154169        what0_(&idisk,&iedge);
    155170
    156         /*this is the solution: */
    157         wi = blocks_.aswokm;
     171        /*output solution: */
     172        if(irate==0){
     173                wi = blocks_.aswokm;
     174                *pwi=wi;
     175                *pdwidt=0;
     176        }
     177        else if (irate==1){
     178                dwidt = blocks_.aswokm;
     179                *pdwidt=dwidt;
     180                *pwi=0;
     181        }
    158182
    159         /*allocate output pointer: */
    160         *pwi=wi;
    161 
    162 //      printf("wi: %g deflection: %g \n",wi,blocks_.aswokm);
     183        //printf("deflection: %g deflection rate %g\n",wi, dwidt);
    163184
    164185}
  • TabularUnified issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.h

    r14734 r14807  
    1010
    1111/* local prototypes: */
    12 void GiaDeflectionCorex( IssmDouble* pwi, GiaDeflectionCoreArgs* arguments);
     12void GiaDeflectionCorex( IssmDouble* pwi, IssmDouble* pdwidt, GiaDeflectionCoreArgs* arguments);
    1313
    1414#endif  /* _GIADEFLECTIONCOREX_H */
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r14769 r14807  
    105105        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
    106106        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
     107        parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
     108        parameters->AddObject(iomodel->CopyConstantObject(GiaOutputRatesEnum));
    107109
    108110        iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
  • TabularUnified issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r14784 r14807  
    478478              else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
    479479              else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
     480              else if (strcmp(name,"GiaOutputRates")==0) return GiaOutputRatesEnum;
     481              else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
     482              else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
    480483              else if (strcmp(name,"GiaW")==0) return GiaWEnum;
    481484              else if (strcmp(name,"P0")==0) return P0Enum;
     
    504507              else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
    505508              else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
    506               else if (strcmp(name,"MinVy")==0) return MinVyEnum;
    507               else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
    508               else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
    509509         else stage=5;
    510510   }
    511511   if(stage==5){
    512               if (strcmp(name,"MinVz")==0) return MinVzEnum;
     512              if (strcmp(name,"MinVy")==0) return MinVyEnum;
     513              else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
     514              else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
     515              else if (strcmp(name,"MinVz")==0) return MinVzEnum;
    513516              else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
    514517              else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
  • TabularUnified issm/trunk-jpl/src/c/solutions/gia_core.cpp

    r14650 r14807  
    1515        int i;
    1616        Vector<IssmDouble>*  wg  = NULL;
     17        Vector<IssmDouble>*  dwgdt  = NULL;
    1718        IssmDouble*          x   = NULL;
    1819        IssmDouble*          y   = NULL;
     
    3536        gsize      = femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
    3637        wg = new Vector<IssmDouble>(gsize);
     38        dwgdt = new Vector<IssmDouble>(gsize);
    3739
    3840        /*first, recover x and y vectors from vertices: */
     
    4042
    4143        /*call the main module: */
    42         femmodel->Deflection(wg,x,y);
     44        femmodel->Deflection(wg,dwgdt,x,y);
    4345
    4446        /*assemble vector: */
    4547        wg->Assemble();
     48        dwgdt->Assemble();
    4649
    4750        InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,wg);
     51        InputUpdateFromVectorx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,dwgdt,GiadWdtEnum,VertexEnum);
    4852
    4953        if(save_results){
    5054                if(VerboseSolution()) _pprintLine_("   saving results");
    5155                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiaWEnum);
     56                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiadWdtEnum);
    5257        }
    5358
  • TabularUnified issm/trunk-jpl/src/m/classes/gia.m

    r14753 r14807  
    77        properties (SetAccess=public)
    88                lithosphere_thickness         = NaN;
     9                output_rates                  = 0;
     10                cross_section_shape           = 0;
    911        end
    1012        methods
     
    1820                end % }}}
    1921                function obj = setdefaultparameters(obj) % {{{
    20 
     22                obj.output_rates=1;  %don't output  rates by default (see irate in GiaDeflectionCorex)
     23                obj.cross_section_shape=1; %square as default (see iedge in GiaDeflectionCorex)
    2124                end % }}}
    2225                function md = checkconsistency(obj,md,solution,analyses) % {{{
     
    2427                        if ~ismember(GiaAnalysisEnum(),analyses), return; end
    2528                        md = checkfield(md,'gia.lithosphere_thickness','NaN',1,'size',[md.mesh.numberofvertices 1],'>',0);
     29                        md = checkfield(md,'gia.output_rates','numel',[1],'values',[1,2]);
     30                        md = checkfield(md,'gia.cross_section_shape','numel',[1],'values',[1,2]);
    2631
    2732                end % }}}
     
    3035
    3136                        fielddisplay(obj,'lithosphere_thickness','lithosphere thickness[km]');
     37                        fielddisplay(obj,'output_rates','1: fetch w solution (m) (default). 2: fetch dw/dt (mm/yr). See irate in GiaDeflectionCore');
     38                        fielddisplay(obj,'cross_section_shape','1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore');
    3239
    3340                end % }}}
    3441                function marshall(obj,fid) % {{{
    3542                        WriteData(fid,'data',obj.lithosphere_thickness,'format','DoubleMat','mattype',1,'enum',GiaLithosphereThicknessEnum());
     43                        WriteData(fid,'object',obj,'fieldname','output_rates','format','Integer');
     44                        WriteData(fid,'object',obj,'fieldname','cross_section_shape','format','Integer');
    3645                end % }}}
    3746        end
  • TabularUnified issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r14784 r14807  
    45194519        return StringToEnum('StressTensorzz')[0]
    45204520
     4521def GiaOutputRatesEnum():
     4522        """
     4523        GIAOUTPUTRATESENUM - Enum of GiaOutputRates
     4524
     4525           Usage:
     4526              macro=GiaOutputRatesEnum()
     4527        """
     4528
     4529        return StringToEnum('GiaOutputRates')[0]
     4530
     4531def GiaCrossSectionShapeEnum():
     4532        """
     4533        GIACROSSSECTIONSHAPEENUM - Enum of GiaCrossSectionShape
     4534
     4535           Usage:
     4536              macro=GiaCrossSectionShapeEnum()
     4537        """
     4538
     4539        return StringToEnum('GiaCrossSectionShape')[0]
     4540
     4541def GiadWdtEnum():
     4542        """
     4543        GIADWDTENUM - Enum of GiadWdt
     4544
     4545           Usage:
     4546              macro=GiadWdtEnum()
     4547        """
     4548
     4549        return StringToEnum('GiadWdt')[0]
     4550
    45214551def GiaWEnum():
    45224552        """
     
    54275457        """
    54285458
    5429         return 541
    5430 
     5459        return 544
     5460
  • TabularUnified issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m

    r14784 r14807  
    99%      macro=MaximumNumberOfEnums()
    1010
    11 macro=541;
     11macro=544;
Note: See TracChangeset for help on using the changeset viewer.