Changeset 21674


Ignore:
Timestamp:
04/18/17 09:23:07 (8 years ago)
Author:
tsantos
Message:

CHG: changes to add AMR capability; new class (amr.m) and new results (mesh). AMR capability in test.

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r21620 r21674  
    15851585                                name==FrictionPEnum ||
    15861586                                name==FrictionQEnum ||
     1587                                name==FrictionCoefficientcoulombEnum ||
    15871588                                name==LoadingforceXEnum ||
    15881589                                name==LoadingforceYEnum ||
  • issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h

    r21068 r21674  
    334334}  /*}}}*/
    335335
     336/*Specific instantiations for int*: */
     337template <> inline GenericExternalResult<int*>::GenericExternalResult(int in_id, int in_enum_type,int* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
     338
     339        id = in_id;
     340        M  = in_M;
     341        N  = in_N;
     342
     343        EnumToStringx(&this->result_name,in_enum_type);
     344
     345        step = in_step;
     346        time = in_time;
     347
     348        /*Copy result in values*/
     349        if(M*N){
     350                value=xNew<int>(M*N);
     351                xMemCpy<int>(value,in_values,M*N);
     352        }
     353        else value=NULL;
     354}
     355/*}}}*/
     356template <> inline GenericExternalResult<int*>::GenericExternalResult(int in_id,const char* in_result_name,int* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
     357
     358        id = in_id;
     359        M  = in_M;
     360        N  = in_N;
     361
     362        /*Copy name*/
     363        this->result_name = xNew<char>(strlen(in_result_name)+1);
     364        xMemCpy<char>(this->result_name,in_result_name,strlen(in_result_name)+1);
     365
     366        step = in_step;
     367        time = in_time;
     368
     369        /*Copy result in values*/
     370        if(M*N){
     371                value=xNew<int>(M*N);
     372                xMemCpy<int>(value,in_values,M*N);
     373        }
     374        else value=NULL;
     375}
     376/*}}}*/
     377template <> inline GenericExternalResult<int*>::GenericExternalResult(int in_id, int in_enum_type,int* in_value,int in_step, IssmDouble in_time){ /*{{{*/
     378        _error_("you cannot initialize a GenericExternalResult<int*> without providing the dimensions of the matrix! Please use a more appropriate constructor!");
     379} /*}}}*/
     380template <> inline GenericExternalResult<int*>::~GenericExternalResult(){ /*{{{*/
     381        xDelete<char>(result_name);
     382        xDelete<int>(value);
     383} /*}}}*/
     384template <> inline void GenericExternalResult<int*>::Echo(void){ /*{{{*/
     385
     386        _printf_("GenericExternalResult<int*>:\n");
     387        this->GenericEcho();
     388        _printf_("   matrix size: " << this->M << "-" << this->N << "\n");
     389
     390} /*}}}*/
     391template <> inline void GenericExternalResult<int*>::DeepEcho(void){ /*{{{*/
     392
     393        int i,j;
     394
     395        _printf_("GenericExternalResult<int*>:\n");
     396        this->GenericEcho();
     397
     398        _printf_("   matrix size: " << this->M << "-" << this->N << "\n");
     399        for (i=0;i<this->M;i++){ 
     400                _printf_("   [ ");
     401                for (j=0;j<this->N;j++){
     402                        _printf_( " " << setw(11) << this->value[i*this->N+j]);
     403                } 
     404                _printf_(" ]\n");
     405        } 
     406
     407} /*}}}*/
     408template <> inline Object* GenericExternalResult<int*>::copy(void){ /*{{{*/
     409        return new GenericExternalResult<int*>(this->id,StringToEnumx(this->result_name),this->value,this->M,this->N,this->step,this->time);
     410} /*}}}*/
     411template <> inline void GenericExternalResult<int*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
     412
     413        int     my_rank;
     414        int     type;
     415        int     rows,cols;
     416        char   *name    = NULL;
     417        IssmPDouble passiveDouble;
     418
     419        /*recover my_rank:*/
     420        my_rank=IssmComm::GetRank();
     421
     422        if(io_gather){
     423                /*we are gathering the data on cpu 0, don't write on other cpus: */
     424                if(my_rank) return;
     425        }
     426
     427        /*First write enum: */
     428        int length=(strlen(this->result_name)+1)*sizeof(char);
     429        fwrite(&length,sizeof(int),1,fid);
     430        fwrite(this->result_name,length,1,fid);
     431
     432        /*Now write time and step: */
     433        passiveDouble=reCast<IssmPDouble>(time);
     434        fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
     435        fwrite(&step,sizeof(int),1,fid);
     436
     437        /*writing an int array, type is 4 (see parseresultsfromdisk.m):*/
     438        type=4;
     439        fwrite(&type,sizeof(int),1,fid);
     440        rows=this->M;
     441        fwrite(&rows,sizeof(int),1,fid);
     442        cols=this->N;
     443        fwrite(&cols,sizeof(int),1,fid);
     444        fwrite(value,cols*rows*sizeof(int),1,fid);
     445
     446}
     447/*}}}*/
     448template <> inline int GenericExternalResult<int*>::ObjectEnum(void){ /*{{{*/
     449        return IntMatExternalResultEnum;
     450} /*}}}*/
     451template <> inline void GenericExternalResult<int*>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
     452
     453        MARSHALLING_ENUM(this->ObjectEnum());
     454
     455        MARSHALLING(id);
     456        MARSHALLING(result_name);
     457        MARSHALLING(M);
     458        MARSHALLING(N);
     459        MARSHALLING_DYNAMIC(value,int,M*N);
     460        MARSHALLING(step);
     461        MARSHALLING(time);
     462
     463}  /*}}}*/
     464/*Specific instantiations for int*: */
     465#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)  //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization.
     466template <> inline void GenericExternalResult<int*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
     467
     468        int     i;
     469        int     my_rank;
     470        int     type;
     471        int     rows,cols;
     472        char   *name    = NULL;
     473        IssmPDouble passiveDouble;
     474        int* passiveInts;
     475
     476        /*recover my_rank:*/
     477        my_rank=IssmComm::GetRank();
     478
     479        if(io_gather){
     480                /*we are gathering the data on cpu 0, don't write on other cpus: */
     481                if(my_rank) return;
     482        }
     483
     484        /*First write enum: */
     485        int length=(strlen(this->result_name)+1)*sizeof(char);
     486        fwrite(&length,sizeof(int),1,fid);
     487        fwrite(this->result_name,length,1,fid);
     488
     489        /*Now write time and step: */
     490        passiveDouble=reCast<IssmPDouble>(time);
     491        fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
     492        fwrite(&step,sizeof(int),1,fid);
     493
     494        /*writing a int array, type is 4 (see parseresultsfromdisk.m):*/
     495        type=4;
     496        fwrite(&type,sizeof(int),1,fid);
     497        rows=this->M;
     498        fwrite(&rows,sizeof(int),1,fid);
     499        cols=this->N;
     500        fwrite(&cols,sizeof(int),1,fid);
     501
     502        passiveInts=xNew<int>(this->M*this->N);
     503        for (i=0;i<this->M*this->N;i++)passiveInts[i]=reCast<int>(value[i]);
     504        fwrite(passiveInts,cols*rows*sizeof(int),1,fid);
     505        xDelete<int>(int);
     506
     507}
     508/*}}}*/
     509#endif
     510
    336511/*Specific instantiations for IssmPDouble*: */
    337512template <> inline GenericExternalResult<IssmPDouble*>::GenericExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
  • issm/trunk-jpl/src/c/cores/transient_core.cpp

    r21583 r21674  
    2626        int        output_frequency;
    2727        int        recording_frequency;
    28         int        domaintype,groundingline_migration,smb_model;
     28        int        domaintype,groundingline_migration,smb_model,amr_frequency;
    2929        int        numoutputs;
    3030        Analysis  *analysis          = NULL;
     
    6060        femmodel->parameters->FindParam(&isdamageevolution,TransientIsdamageevolutionEnum);
    6161        femmodel->parameters->FindParam(&ishydrology,TransientIshydrologyEnum);
     62        femmodel->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
    6263        femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
    6364        if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
    6465        femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
    6566        if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
     67
     68        #ifdef _HAVE_NEOPZ_
     69        bool ismismip = false;//itapopo testing restart
     70        if(ismismip) femmodel->ReMesh();
     71        #endif
    6672
    6773        while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
     
    170176                /*Adaptive mesh refinement*/
    171177                #ifdef _HAVE_NEOPZ_
    172                 int isamr=true;
    173                 if(isamr) femmodel->ReMesh();
     178                if(save_results) femmodel->WriteMeshInResults();
     179                if(step%amr_frequency==0 && time<finaltime) femmodel->ReMesh();//Do not refine the last step
    174180                #endif
    175181       
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r21577 r21674  
    8484                parameters->AddObject(iomodel->CopyConstantObject("md.transient.isslr",TransientIsslrEnum));
    8585                parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum));
     86                parameters->AddObject(iomodel->CopyConstantObject("md.transient.amr_frequency",TransientAmrFrequencyEnum));
    8687                parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
    8788                parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
     89                /*amr properties*/     
     90                parameters->AddObject(iomodel->CopyConstantObject("md.amr.level_max",AmrLevelMaxEnum));
     91                parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_1",AmrRegionLevel1Enum));
     92                parameters->AddObject(iomodel->CopyConstantObject("md.amr.region_level_max",AmrRegionLevelMaxEnum));
    8893
    8994                /*For stress balance only*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r21626 r21674  
    581581        DoubleMatExternalResultEnum,
    582582        IntExternalResultEnum,
     583        IntMatExternalResultEnum,
    583584        JEnum,
    584585        StringExternalResultEnum,
     
    819820        EsaNumRequestedOutputsEnum,
    820821        /*}}}*/
     822        /*Adaptive mesh refinement (AMR){{{*/
     823        AmrLevelMaxEnum,
     824        AmrRegionLevel1Enum,
     825        AmrRegionLevelMaxEnum,
     826        TransientAmrFrequencyEnum,
     827        /*}}}*/
    821828        ParametersENDEnum,
    822829        /*Coordinate Systems{{{*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r21626 r21674  
    577577                case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
    578578                case IntExternalResultEnum : return "IntExternalResult";
     579                case IntMatExternalResultEnum : return "IntMatExternalResult";
    579580                case JEnum : return "J";
    580581                case StringExternalResultEnum : return "StringExternalResult";
     
    796797                case EsaRequestedOutputsEnum : return "EsaRequestedOutputs";
    797798                case EsaNumRequestedOutputsEnum : return "EsaNumRequestedOutputs";
     799                case AmrLevelMaxEnum : return "AmrLevelMax";
     800                case AmrRegionLevel1Enum : return "AmrRegionLevel1";
     801                case AmrRegionLevelMaxEnum : return "AmrRegionLevelMax";
     802                case TransientAmrFrequencyEnum : return "TransientAmrFrequency";
    798803                case ParametersENDEnum : return "ParametersEND";
    799804                case XYEnum : return "XY";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r21626 r21674  
    589589              else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    590590              else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
     591              else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
    591592              else if (strcmp(name,"J")==0) return JEnum;
    592593              else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
     
    628629              else if (strcmp(name,"Outputdefinition30")==0) return Outputdefinition30Enum;
    629630              else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum;
    630               else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
     634              if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
     635              else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
    635636              else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
    636637              else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
     
    751752              else if (strcmp(name,"Regular")==0) return RegularEnum;
    752753              else if (strcmp(name,"Scaled")==0) return ScaledEnum;
    753               else if (strcmp(name,"Separate")==0) return SeparateEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"Sset")==0) return SsetEnum;
     757              if (strcmp(name,"Separate")==0) return SeparateEnum;
     758              else if (strcmp(name,"Sset")==0) return SsetEnum;
    758759              else if (strcmp(name,"Dense")==0) return DenseEnum;
    759760              else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
     
    814815              else if (strcmp(name,"EsaRequestedOutputs")==0) return EsaRequestedOutputsEnum;
    815816              else if (strcmp(name,"EsaNumRequestedOutputs")==0) return EsaNumRequestedOutputsEnum;
     817              else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
     818              else if (strcmp(name,"AmrRegionLevel1")==0) return AmrRegionLevel1Enum;
     819              else if (strcmp(name,"AmrRegionLevelMax")==0) return AmrRegionLevelMaxEnum;
     820              else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum;
    816821              else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum;
    817822              else if (strcmp(name,"XY")==0) return XYEnum;
     
    870875              else if (strcmp(name,"SegInput")==0) return SegInputEnum;
    871876              else if (strcmp(name,"Tria")==0) return TriaEnum;
    872               else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
     877         else stage=8;
     878   }
     879   if(stage==8){
     880              if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
    873881              else if (strcmp(name,"Tetra")==0) return TetraEnum;
    874882              else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
    875883              else if (strcmp(name,"Penta")==0) return PentaEnum;
    876884              else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
    877          else stage=8;
    878    }
    879    if(stage==8){
    880               if (strcmp(name,"Vertex")==0) return VertexEnum;
     885              else if (strcmp(name,"Vertex")==0) return VertexEnum;
    881886              else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
    882887              else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
     
    993998              else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
    994999              else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
    995               else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
     1000         else stage=9;
     1001   }
     1002   if(stage==9){
     1003              if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
    9961004              else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum;
    9971005              else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum;
    9981006              else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
    9991007              else if (strcmp(name,"Closed")==0) return ClosedEnum;
    1000          else stage=9;
    1001    }
    1002    if(stage==9){
    1003               if (strcmp(name,"Free")==0) return FreeEnum;
     1008              else if (strcmp(name,"Free")==0) return FreeEnum;
    10041009              else if (strcmp(name,"Open")==0) return OpenEnum;
    10051010              else if (strcmp(name,"Air")==0) return AirEnum;
  • issm/trunk-jpl/src/m/classes/model.js

    r21584 r21674  
    4141                        console.log(sprintf("//19s: //-22s -- //s","inversion"       ,"[1x1 " + typeof(this.inversion) + "]","parameters for inverse methods"));
    4242                        console.log(sprintf("//19s: //-22s -- //s","qmu"             ,"[1x1 " + typeof(this.qmu) + "]","dakota properties"));
     43                        console.log(sprintf("//19s: //-22s -- //s","amr"             ,"[1x1 " + typeof(this.amr) + "]","adaptive mesh refinement properties"));
    4344                        console.log(sprintf("//19s: //-22s -- //s","outputdefinition","[1x1 " + typeof(this.outputdefinition) + "]","output definition"));
    4445                        console.log(sprintf("//19s: //-22s -- //s","results"         ,"[1x1 " + typeof(this.results) + "]","model results"));
     
    8283                        this.inversion        = new inversion();
    8384                        this.qmu              = new qmu();
     85                        this.amr                                         = new amr();
    8486                        this.radaroverlay     = new radaroverlay();
    8587                        this.results          = {};
     
    612614                this.inversion        = 0;
    613615                this.qmu              = 0;
     616                this.amr                                         = 0;
    614617
    615618                this.results          = 0;
  • issm/trunk-jpl/src/m/classes/model.m

    r21667 r21674  
    4646                inversion        = 0;
    4747                qmu              = 0;
     48                amr                               = 0;
    4849
    4950                results          = 0;
     
    11241125                        md.inversion        = inversion();
    11251126                        md.qmu              = qmu();
     1127                        md.amr                            = amr();
    11261128                        md.radaroverlay     = radaroverlay();
    11271129                        md.results          = struct();
     
    12961298                        disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(self.inversion) ']'],'parameters for inverse methods'));
    12971299                        disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(self.qmu) ']'],'dakota properties'));
     1300                        disp(sprintf('%19s: %-22s -- %s','amr'             ,['[1x1 ' class(self.amr) ']'],'adaptive mesh refinement properties'));
    12981301                        disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(self.outputdefinition) ']'],'output definition'));
    12991302                        disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(self.results) ']'],'model results'));
  • issm/trunk-jpl/src/m/classes/model.py

    r21584 r21674  
    5050from outputdefinition import outputdefinition
    5151from qmu import qmu
     52from amr import amr
    5253from results import results
    5354from radaroverlay import radaroverlay
     
    112113                self.inversion        = inversion()
    113114                self.qmu              = qmu()
     115                self.amr                                         = amr()
    114116
    115117                self.results          = results()
     
    154156                        'inversion',\
    155157                        'qmu',\
     158                        'amr',\
    156159                        'outputdefinition',\
    157160                        'results',\
     
    194197                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
    195198                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
     199                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("amr","[%s,%s]" % ("1x1",obj.amr.__class__.__name__),"adaptive mesh refinement properties"))
    196200                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("outputdefinition","[%s,%s]" % ("1x1",obj.outputdefinition.__class__.__name__),"output definition"))
    197201                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("results","[%s,%s]" % ("1x1",obj.results.__class__.__name__),"model results"))
  • issm/trunk-jpl/src/m/classes/trans.js

    r21584 r21674  
    2020                this.isslr           = 0;
    2121                this.iscoupler       = 0;
     22                this.amr_frequency   = 0;
    2223
    2324                //default output
     
    4041                fielddisplay(this,'isslr','indicates whether a sea-level rise model is used');
    4142                fielddisplay(this,'iscoupler','indicates whether different models are being run with need for coupling');
     43                fielddisplay(this,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps');
    4244                fielddisplay(this,'requested_outputs','list of additional outputs requested');
    4345
     
    6365                        checkfield(md,'fieldname','trans.iscoupler','numel',[1],'values',[0 ,1]);
    6466                        checkfield(md,'fieldname','trans.isslr','numel',[1],'values',[0 ,1]);
     67                        checkfield(md,'fieldname','trans.amr_frequency','numel',[1],'>=',1,'NaN',1,'Inf',1);
    6568                        checkfield(md,'fieldname','trans.requested_outputs','stringrow',1);
    6669                } // }}}
     
    7982                        WriteData(fid,prefix,'object',this,'fieldname','isslr','format','Boolean');
    8083                        WriteData(fid,prefix,'object',this,'fieldname','iscoupler','format','Boolean');
     84                        WriteData(fid,prefix,'object',this,'fieldname','amr_frequency','format','Integer');
    8185
    8286                        //process requested outputs
     
    111115        this.isslr             = 0;
    112116        this.iscoupler         = 0;
     117        this.amr_frequency        = 0;
    113118        this.requested_outputs = [];
    114119
  • issm/trunk-jpl/src/m/classes/transient.m

    r21584 r21674  
    1818                isslr             = 0;
    1919                iscoupler         = 0;
     20                amr_frequency     = 0;
    2021                isoceancoupling   = 0;
    2122                requested_outputs = {};
     
    4647                        self.isoceancoupling = 0;
    4748                        self.iscoupler       = 0;
     49                        self.amr_frequency      = 0;
    4850
    4951                        %default output
     
    6668                        self.isoceancoupling = 0;
    6769                        self.iscoupler       = 0;
     70                        self.amr_frequency      = 1;
    6871
    6972                        %default output
     
    9699                        md = checkfield(md,'fieldname','transient.isoceancoupling','numel',[1],'values',[0 1]);
    97100                        md = checkfield(md,'fieldname','transient.iscoupler','numel',[1],'values',[0 1]);
     101                        md = checkfield(md,'fieldname','transient.amr_frequency','numel',[1],'>=',1,'NaN',1,'Inf',1);
    98102
    99103                        if (~strcmp(solution,'TransientSolution') & md.transient.iscoupling==1),
     
    117121                        fielddisplay(self,'isoceancoupling','indicates whether a coupling with an ocean model is used in the transient');
    118122                        fielddisplay(self,'iscoupler','indicates whether different models are being run with need for coupling');
     123                        fielddisplay(self,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps');
    119124                        fielddisplay(self,'requested_outputs','list of additional outputs requested');
    120125
     
    134139                        WriteData(fid,prefix,'object',self,'fieldname','isoceancoupling','format','Boolean');
    135140                        WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean');
     141                        WriteData(fid,prefix,'object',self,'fieldname','amr_frequency','format','Integer');
    136142
    137143                        %process requested outputs
     
    159165                        writejsdouble(fid,[modelname '.trans.isoceancoupling'],self.isoceancoupling);
    160166                        writejsdouble(fid,[modelname '.trans.iscoupler'],self.iscoupler);
     167                        writejsdouble(fid,[modelname '.trans.amr_frequency'],self.amr_frequency);
    161168                        writejscellstring(fid,[modelname '.trans.requested_outputs'],self.requested_outputs);
    162169
  • issm/trunk-jpl/src/m/classes/transient.py

    r21584 r21674  
    2525                self.isoceancoupling   = False
    2626                self.iscoupler         = False
     27                amr_frequency                     = 0
    2728                self.requested_outputs = []
    2829
     
    4647                string="%s\n%s"%(string,fielddisplay(self,'isoceancoupling','indicates whether coupling with an ocean model is used in the transient'))
    4748                string="%s\n%s"%(string,fielddisplay(self,'iscoupler','indicates whether different models are being run with need for coupling'))
     49                string="%s\n%s"%(string,fielddisplay(self,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps'))
    4850                string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','list of additional outputs requested'))
    4951                return string
     
    7375                self.isslr             = False
    7476                self.iscoupler         = False
     77                self.amr_frequency        = 0
    7578
    7679                #default output
     
    9497                self.isoceancoupling = False
    9598                self.iscoupler       = False
     99                self.amr_frequency      = 1
    96100
    97101                #default output
     
    118122                md = checkfield(md,'fieldname','transient.isoceancoupling','numel',[1],'values',[0,1])
    119123                md = checkfield(md,'fieldname','transient.iscoupler','numel',[1],'values',[0,1])
     124                md = checkfield(md,'fieldname','transient.amr_frequency','numel',[1],'>=',1,'NaN',1,'Inf',1)
    120125                md = checkfield(md,'fieldname','transient.requested_outputs','stringrow',1)
    121126
     
    139144                WriteData(fid,prefix,'object',self,'fieldname','isoceancoupling','format','Boolean')
    140145                WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean')
     146                WriteData(fid,prefix,'object',self,'fieldname','amr_frequency','format','Integer')
    141147
    142148                #process requested outputs
  • issm/trunk-jpl/src/m/solve/parseresultsfrombuffer.js

    r20900 r21674  
    8181                        field=fid.fread(N*M,'double');
    8282                }
     83                else if (type==4) {
     84                        N=fid.fread(1,'int');
     85                        field=fid.fread(N*M,'int');
     86                }
    8387                else throw Error(sprintf("%s%i",'ReadData error message: cannot read data of type ',type));
    8488
  • issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m

    r21216 r21674  
    154154                N=fread(fid,1,'int');
    155155                field=transpose(fread(fid,[N M],'double'));
     156        elseif type==4,
     157                N=fread(fid,1,'int');
     158                field=transpose(fread(fid,[N M],'int'));
    156159        else
    157160                error(['cannot read data of type ' num2str(type) ]);
  • issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py

    r21303 r21674  
    162162                        for i in xrange(M):
    163163                                field[i,:]=struct.unpack('%dd' % N,fid.read(N*struct.calcsize('d')))
     164                elif type==4:
     165                        N=struct.unpack('i',fid.read(struct.calcsize('i')))[0]
     166#                       field=transpose(fread(fid,[N M],'int'));
     167                        field=np.zeros(shape=(M,N),dtype=int)
     168                        for i in xrange(M):
     169                                field[i,:]=struct.unpack('%ii' % N,fid.read(N*struct.calcsize('i')))
    164170                else:
    165171                        raise TypeError("cannot read data of type %d" % type)
Note: See TracChangeset for help on using the changeset viewer.