Changeset 19793


Ignore:
Timestamp:
11/23/15 19:23:20 (9 years ago)
Author:
Eric.Larour
Message:

CHG: finished first prototype of running stressbalance in javascript. Need to now process the output buffers
through loadresultsfromcluster.

Location:
issm/trunk-jpl
Files:
4 added
29 edited

Legend:

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

    r19764 r19793  
    112112        char *lockfilename   = NULL;
    113113
    114         this->parameters->FindParam(&outbinfilename,OutputFileNameEnum);
    115         this->parameters->FindParam(&lockfilename,LockFileNameEnum);
     114        #ifndef _HAVE_JAVASCRIPT_
     115        if(this->parameters->Exist(OutputFileNameEnum)) this->parameters->FindParam(&outbinfilename,OutputFileNameEnum);
     116        if(this-parameters->Exist(LockFileNameEnum)) this->parameters->FindParam(&lockfilename,LockFileNameEnum);
     117        #endif
    116118
    117119        /*Delete all the datasets: */
     
    23352337}
    23362338/*}}}*/
     2339
     2340#ifdef _HAVE_JAVASCRIPT_
     2341FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/
     2342        /*configuration: */
     2343        int  solution_type;
     2344        int  ierr;
     2345
     2346        /*First things first, store the communicator, and set it as a global variable: */
     2347        this->comm=incomm;
     2348        this->SetStaticComm();
     2349
     2350        /*Start profiler: */
     2351        this->profiler=new Profiler();
     2352        profiler->Tag(Start);
     2353
     2354        /*From command line arguments, retrieve different filenames needed to create the FemModel: */
     2355        solution_type=StringToEnumx(solution);
     2356       
     2357        /*Create femmodel from input files: */
     2358        profiler->Tag(StartInit);
     2359        this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
     2360        profiler->Tag(FinishInit);
     2361
     2362}
     2363/*}}}*/
     2364void FemModel::InitFromBuffers(char* buffer, int buffersize, char* toolkits, int in_solution_type, bool trace, IssmPDouble* X){/*{{{*/
     2365
     2366        /*intermediary*/
     2367        int         i;
     2368        int         analysis_type;
     2369        FILE       *IOMODEL = NULL;
     2370        FILE       *toolkitsoptionsfid = NULL;
     2371        FILE       *output_fid = NULL;
     2372        int         my_rank;
     2373        size_t      outputsize;
     2374        char       *outputbuffer;
     2375        const char* rootpath=""; //needed for Dakota runs only, which we won't do here.
     2376
     2377        /*recover my_rank:*/
     2378        my_rank=IssmComm::GetRank();
     2379
     2380        /*Initialize internal data: */
     2381        this->solution_type    = in_solution_type;
     2382        this->analysis_counter = nummodels-1;   //point to last analysis_type carried out.
     2383        this->results          = new Results(); //not initialized by CreateDataSets
     2384       
     2385        /*Open input file on cpu 0 and create IoModel */
     2386        if(my_rank==0) IOMODEL = fmemopen((void*)buffer, buffersize, "rb");
     2387        IoModel* iomodel = new IoModel(IOMODEL,in_solution_type,trace,X);
     2388
     2389        /*Figure out what analyses are activated for this solution*/
     2390        SolutionAnalysesList(&this->analysis_type_list,&this->nummodels,iomodel,this->solution_type);
     2391
     2392        /*Open toolkits file: */
     2393        toolkitsoptionsfid=fmemopen((void*)toolkits, strlen(toolkits)+1, "r");
     2394
     2395        /*create datasets for all analyses*/
     2396        ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,iomodel,toolkitsoptionsfid,(char*)rootpath,this->solution_type,this->nummodels,this->analysis_type_list);
     2397
     2398        /*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
     2399        for(i=0;i<nummodels;i++){
     2400
     2401                if(VerboseMProcessor()) _printf0_("   Processing finite element model of analysis " << EnumToStringx(analysis_type_list[i]) << ":\n");
     2402                analysis_type=analysis_type_list[i];
     2403                this->SetCurrentConfiguration(analysis_type);
     2404
     2405                if(i==0){
     2406                        if(VerboseMProcessor()) _printf0_("      creating vertex PIDs\n");
     2407                        VerticesDofx(vertices,parameters); //only call once, we only have one set of vertices
     2408                }
     2409
     2410                if(VerboseMProcessor()) _printf0_("      resolving node constraints\n");
     2411                SpcNodesx(nodes,constraints,parameters,analysis_type);
     2412
     2413                if(VerboseMProcessor()) _printf0_("      creating nodal degrees of freedom\n");
     2414                NodesDofx(nodes,parameters,analysis_type);
     2415
     2416                if(VerboseMProcessor()) _printf0_("      configuring element and loads\n");
     2417                ConfigureObjectsx(elements, loads, nodes, vertices, materials,parameters);
     2418        }
     2419
     2420        /*Close input file and toolkits file descriptors: */
     2421        if(my_rank==0) fclose(IOMODEL);
     2422        fclose(toolkitsoptionsfid);
     2423
     2424        /*Open output file once for all and add output file descriptor to parameters*/
     2425        output_fid=open_memstream(&outputbuffer,&outputsize);
     2426        if(output_fid==NULL)_error_("FemModel::InitFromBuffers error message: could not initialize output stream");
     2427        this->parameters->SetParam(output_fid,OutputFilePointerEnum);
     2428       
     2429        /*Clean up*/
     2430        delete iomodel;
     2431}/*}}}*/
     2432void FemModel::CleanUpJs(void){/*{{{*/
     2433
     2434        /*Intermediary*/
     2435        FILE *output_fid;
     2436
     2437        /*Close output file: */
     2438        this->parameters->FindParam(&output_fid,OutputFilePointerEnum);
     2439        fclose(output_fid);
     2440
     2441        /*Before we delete the profiler, report statistics for this run: */
     2442        profiler->Tag(Finish);  //final tagging
     2443        _printf0_("\n");
     2444        _printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit) << "\n");
     2445        _printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore) << "\n");
     2446        _printf0_("\n");
     2447        _printf0_("   Total elapsed time: "
     2448                                <<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
     2449                                <<profiler->DeltaTimeModMin(Start,Finish)<<" min "
     2450                                <<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
     2451                                );
     2452        _printf0_("\n");
     2453}
     2454/*}}}*/
     2455#endif
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r19764 r19793  
    119119                void HydrologyEPLupdateDomainx(IssmDouble* pEplcount);
    120120                void UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count);
     121
     122                #ifdef _HAVE_JAVASCRIPT_
     123                FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace=false);
     124                void InitFromBuffers(char* buffer, int buffersize, char* toolkits, int solution_type,bool trace,IssmPDouble* X=NULL);
     125                void CleanUpJs(void);
     126                #endif
    121127};
     128               
    122129
    123130#endif
  • issm/trunk-jpl/src/m/array/arrayoperations.js

    r19787 r19793  
    112112function IsArray(object) { //{{{
    113113
    114         if( Object.prototype.toString.call( object ) === '[object Array]' ) {
    115                 return 1;
    116         }
    117         else return 0;
     114        var type=Object.prototype.toString.call( object );
     115        if( type === '[object Array]' ) return 1;
     116        if( type === '[object Float64Array]' ) return 1;
     117        if( type === '[object Float32Array]' ) return 1;
     118        if( type === '[object Int32Array]' ) return 1;
     119        if( type === '[object Int16Array]' ) return 1;
     120        if( type === '[object Uint32Array]' ) return 1;
     121        if( type === '[object Uint16Array]' ) return 1;
     122        if( type === '[object Uint8Array]' ) return 1;
     123        return 0;
    118124
    119125} //}}}
  • issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.js

    r19759 r19793  
    3131        md.stressbalance.spcvy=NewArrayFill(md.mesh.numberofvertices,NaN);
    3232        md.stressbalance.spcvz=NewArrayFill(md.mesh.numberofvertices,NaN);
    33         md.stressbalance.referential=NewArrayFill(md.mesh.numberofvertices,NaN);
     33        md.stressbalance.referential=Create2DArray(md.mesh.numberofvertices,6);
     34        for(var i=0;i<md.mesh.numberofvertices;i++)for(var j=0;j<6;j++)md.stressbalance.referential[i][j]=NaN;
    3435        md.stressbalance.loadingforce=NewArrayFill(md.mesh.numberofvertices,0);
    3536
     
    8283
    8384        //Deal with other boundary conditions
    84         if (md.balancethickness.thickening_rate === NaN){
     85        if (isNaN(md.balancethickness.thickening_rate)){
    8586                md.balancethickness.thickening_rate=NewArrayFill(md.mesh.numberofvertices,0);
    8687                console.log('      no balancethickness.thickening_rate specified: values set as zero');
  • issm/trunk-jpl/src/m/classes/SMBforcing.js

    r19791 r19793  
    2121                this.initialize = function(md) {// {{{
    2222
    23                         if (self.mass_balance === NaN){
     23                        if (isNaN(self.mass_balance)){
    2424                                self.mass_balance=NewArrayFill(md.mesh.numberofvertices,0);
    2525                                console.log('      no smb.mass_balance specified: values set as zero');
     
    4747                        //process requested outputs
    4848                        outputs = this.requested_outputs;
    49                         for (var i=0;i<outputs;i++){
     49                        for (var i=0;i<outputs.length;i++){
    5050                                if (outputs[i] == 'default') {
    5151                                        outputs.splice(i,1);
    52                                         outputs.push(this.defaultoutputs());
     52                                        newoutputs=this.defaultoutputs(md);
     53                                        for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
    5354                                }
    5455                        }
    55                         WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
     56                        WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray');
    5657
    5758                }//}}}
    5859        //properties
    5960        this.mass_balance = NaN;
    60         this.requested_outputs      = [''];
     61        this.requested_outputs      = [];
    6162        this.setdefaultparameters();
    6263}
  • issm/trunk-jpl/src/m/classes/balancethickness.js

    r19791 r19793  
    3838
    3939                        WriteData(fid,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1);
    40                         WriteData(fid,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts);
     40                        WriteData(fid,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1/yts);
    4141                        WriteData(fid,'object',this,'fieldname','stabilization','format','Integer');
    4242                        WriteData(fid,'object',this,'fieldname','omega','format','DoubleMat','mattype',1);
  • issm/trunk-jpl/src/m/classes/basalforcings.js

    r19791 r19793  
    2222                this.initialize = function (md){ // {{{
    2323
    24                         if (this.groundedice_melting_rate === NaN){
     24                        if (isNaN(this.groundedice_melting_rate)){
    2525                                this.groundedice_melting_rate=NewArrayFill(md.mesh.numberofvertices,0);
    2626                                console.log('      no basalforcings.groundedice_melting_rate specified: values set as zero');
    2727                        }
    2828
    29                         if (this.floatingice_melting_rate === NaN){
     29                        if (isNaN(this.floatingice_melting_rate)){
    3030                                this.floatingice_melting_rate=NewArrayFill(md.mesh.numberofvertices,0);
    3131                                console.log('      no basalforcings.floatingice_melting_rate specified: values set as zero');
  • issm/trunk-jpl/src/m/classes/clusters/generic.js

    r19787 r19793  
    3636                console.log(sprintf('    shell: %s',this.shell));
    3737        }// }}}
     38        this.classname= function(){// {{{
     39                return "generic";
     40        }// }}}
    3841                this.checkconsistency = function (md,solution,analyses) { //{{{
    3942                        if (cluster.np<1){
  • issm/trunk-jpl/src/m/classes/damage.js

    r19791 r19793  
    8787                        }
    8888                        else if (this.law!=0){
    89                                 if (solution==DamageEvolutionSolutionEnum){
     89                                if (solution==DamageEvolutionSolutionEnum()){
    9090                                        throw Error('Invalid evolution law (md.damage.law) for a damage solution');
    9191                                }
     
    116116                        //process requested outputs
    117117                        outputs = this.requested_outputs;
    118                         for (var i=0;i<outputs;i++){
     118                        for (var i=0;i<outputs.length;i++){
    119119                                if (outputs[i] == 'default') {
    120120                                        outputs.splice(i,1);
     
    123123                        }
    124124                        if (this.isdamage){
    125                                 WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray');
     125                                WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum(),'format','StringArray');
    126126                        }
    127127
     
    129129                this.defaultoutputs = function(md){ //{{{
    130130
    131                         if (md.domaintype() == '2Dhorizontal') return 'DamageDbar';
     131                        if (md.mesh.domaintype() == '2Dhorizontal') return 'DamageDbar';
    132132                        else return 'DamageD';
    133133
     
    155155        this.healing             = 0;
    156156        this.equiv_stress                 = 0;
    157         this.requested_outputs   = [''];
     157        this.requested_outputs   = [];
    158158
    159159        this.setdefaultparameters();
  • issm/trunk-jpl/src/m/classes/friction.js

    r19791 r19793  
    3232                        var yts=365.0*24.0*3600.0;
    3333
    34                         WriteData(fid,'enum',FrictionLawEnum,'data',1,'format','Integer');
     34                        WriteData(fid,'enum',FrictionLawEnum(),'data',1,'format','Integer');
    3535                        WriteData(fid,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
    3636                        //WriteData(fid,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1);
  • issm/trunk-jpl/src/m/classes/geometry.js

    r19791 r19793  
    5555                this.setdefaultparameters();
    5656                //}}}
    57 
    5857}
  • issm/trunk-jpl/src/m/classes/initialization.js

    r19791 r19793  
    3535                                checkfield(md,'fieldname','initialization.vy','NaN',1,'size',[md.mesh.numberofvertices, 1]);
    3636                        }
    37                         if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum)){
     37                        if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum())){
    3838                                checkfield(md,'fieldname','initialization.vx','NaN',1,'size',[md.mesh.numberofvertices, 1]);
    3939                                checkfield(md,'fieldname','initialization.vy','NaN',1,'size',[md.mesh.numberofvertices, 1]);
     
    8585                        var yts=365.0*24.0*3600.0;
    8686
    87                         WriteData(fid,'data',this.vx,'format','DoubleMat','mattype',1,'enum',VxEnum,'scale',1./yts);
    88                         WriteData(fid,'data',this.vy,'format','DoubleMat','mattype',1,'enum',VyEnum,'scale',1./yts);
    89                         WriteData(fid,'data',this.vz,'format','DoubleMat','mattype',1,'enum',VzEnum,'scale',1./yts);
    90                         WriteData(fid,'data',this.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum);
    91                         WriteData(fid,'data',this.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum);
    92                         WriteData(fid,'data',this.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum);
    93                         WriteData(fid,'data',this.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum);
    94                         WriteData(fid,'data',this.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum);
    95                         WriteData(fid,'data',this.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum);
    96                         WriteData(fid,'data',this.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum);
     87                        WriteData(fid,'data',this.vx,'format','DoubleMat','mattype',1,'enum',VxEnum(),'scale',1./yts);
     88                        WriteData(fid,'data',this.vy,'format','DoubleMat','mattype',1,'enum',VyEnum(),'scale',1./yts);
     89                        WriteData(fid,'data',this.vz,'format','DoubleMat','mattype',1,'enum',VzEnum(),'scale',1./yts);
     90                        WriteData(fid,'data',this.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum());
     91                        WriteData(fid,'data',this.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum());
     92                        WriteData(fid,'data',this.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum());
     93                        WriteData(fid,'data',this.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum());
     94                        WriteData(fid,'data',this.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum());
     95                        WriteData(fid,'data',this.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum());
     96                        WriteData(fid,'data',this.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum());
    9797
    9898                        if (md.thermal.isenthalpy){
  • issm/trunk-jpl/src/m/classes/masstransport.js

    r19791 r19793  
    6868                        //process requested outputs
    6969                        outputs = this.requested_outputs;
    70                         for (var i=0;i<outputs;i++){
     70                        for (var i=0;i<outputs.length;i++){
    7171                                if (outputs[i] == 'default') {
    7272                                        outputs.splice(i,1);
    73                                         outputs.push(this.defaultoutputs());
     73                                        newoutputs=this.defaultoutputs(md);
     74                                        for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
    7475                                }
    7576                        }
    76                         WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum,'format','StringArray');
     77                        WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum(),'format','StringArray');
    7778                }//}}}
    7879                this.defaultoutputs = function(md) { //{{{
     
    8990        this.vertex_pairing         = NaN;
    9091        this.penalty_factor         = 0;
    91         this.requested_outputs      = [''];
     92        this.requested_outputs      = [];
    9293
    9394        this.setdefaultparameters();
  • issm/trunk-jpl/src/m/classes/model.js

    r19780 r19793  
    6666                        this.settings         = new settings();
    6767                        this.toolkits         = new toolkits();
    68                         this.cluster          = new generic();
     68                        this.cluster          = new local();
    6969                        this.balancethickness = new balancethickness();
    7070                        this.stressbalance    = new stressbalance();
  • issm/trunk-jpl/src/m/classes/outputdefinition.js

    r19791 r19793  
    77        //methods
    88        this.setdefaultparameters = function(){// {{{
    9                 this.definitions={};
     9                this.definitions=[];
    1010        }// }}}
    1111        this.disp= function(){// {{{
     
    4141        //properties
    4242        // {{{
    43         this.definitions                 = {};
     43        this.definitions                 = [];
    4444        this.setdefaultparameters();
    4545        //}}}
  • issm/trunk-jpl/src/m/classes/qmu.js

    r19791 r19793  
    103103                        WriteData(fid,'object',this,'fieldname','isdakota','format','Boolean');
    104104                        if (!this.isdakota){
    105                                 WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
     105                                WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
    106106                                return;
    107107                        }
     
    112112                        WriteData(fid,'object',this,'fieldname','responsedescriptors','format','StringArray');
    113113                        if (this.mass_flux_segments.length){
    114                                 WriteData(fid,'data',this.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
     114                                WriteData(fid,'data',this.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
    115115                                flag=true;
    116116                        }
    117117                        else flag=false;
    118                         WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
     118                        WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
    119119                }//}}}
    120120        //properties
  • issm/trunk-jpl/src/m/classes/steadystate.js

    r19791 r19793  
    5252                        //process requested outputs
    5353                        outputs = this.requested_outputs;
    54                         for (var i=0;i<outputs;i++){
     54                        for (var i=0;i<outputs.length;i++){
    5555                                if (outputs[i] == 'default') {
    5656                                        outputs.splice(i,1);
    57                                         outputs.push(this.defaultoutputs());
     57                                        newoutputs=this.defaultoutputs(md);
     58                                        for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
    5859                                }
    5960                        }
    60                         WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum,'format','StringArray');
     61                        WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray');
    6162                }//}}}
    6263                this.defaultoutputs = function(md) { //{{{
     
    6465                        var list=[];
    6566
    66                         for (var i=0;i<md.stressbalance.defaultoutputs().length;i++)list.push(md.stressbalance.defaultoutputs()[i]);
    67                         for (var i=0;i<md.thermal.defaultoutputs().length;i++)list.push(md.thermal.defaultoutputs()[i]);
     67                        for (var i=0;i<md.stressbalance.defaultoutputs(md).length;i++)list.push(md.stressbalance.defaultoutputs(md)[i]);
     68                        for (var i=0;i<md.thermal.defaultoutputs(md).length;i++)list.push(md.thermal.defaultoutputs(md)[i]);
    6869
    6970                        return list;
  • issm/trunk-jpl/src/m/classes/stressbalance.js

    r19791 r19793  
    162162                        lz=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)lz[i]=this.loadingforce[i][2];
    163163
    164                         WriteData(fid,'data',lx,'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
    165                         WriteData(fid,'data',ly,'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
    166                         WriteData(fid,'data',lz,'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
     164                        WriteData(fid,'data',lx,'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum());
     165                        WriteData(fid,'data',ly,'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum());
     166                        WriteData(fid,'data',lz,'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum());
    167167
    168168                        //process requested outputs
    169169                        outputs = this.requested_outputs;
    170                         for (var i=0;i<outputs;i++){
     170                        for (var i=0;i<outputs.length;i++){
    171171                                if (outputs[i] == 'default') {
    172172                                        outputs.splice(i,1);
    173                                         outputs.push(this.defaultoutputs());
    174                                 }
    175                         }                       
    176                         WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum,'format','StringArray');
     173                                        newoutputs=this.defaultoutputs(md);
     174                                        for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
     175                                }
     176                        }
     177                        WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum(),'format','StringArray');
    177178                }//}}}
    178179                this.defaultoutputs = function(md){ // {{{
     
    204205        this.referential            = NaN;
    205206        this.loadingforce           = NaN;
    206         this.requested_outputs      = ['']
     207        this.requested_outputs      = []
    207208
    208209        this.setdefaultparameters();
  • issm/trunk-jpl/src/m/classes/thermal.js

    r19791 r19793  
    9797                        //process requested outputs
    9898                        outputs = this.requested_outputs;
    99                         for (var i=0;i<outputs;i++){
     99                        for (var i=0;i<outputs.length;i++){
    100100                                if (outputs[i] == 'default') {
    101101                                        outputs.splice(i,1);
    102                                         outputs.push(this.defaultoutputs());
     102                                        newoutputs=this.defaultoutputs(md);
     103                                        for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
    103104                                }
    104105                        }
  • issm/trunk-jpl/src/m/classes/toolkits.js

    r19787 r19793  
    4747                }
    4848        } // }}}
     49                 this.ToolkitsFile = function(filename) { //{{{
     50                 //TOOLKITSFILE - build toolkits file (in string format)
     51                 //
     52                 //   Build a Petsc compatible options string, from the toolkits model field  + return options string.
     53                 //   This file string will also be used when the toolkit used is 'issm' instead of 'petsc'
     54                 //
     55                 //   Usage:     var toolkitsstring = toolkits.ToolkitsFile();
     56
     57                         var string = '';
     58
     59                         //write header
     60                         string += sprintf('%s%s%s\n','\%Toolkits options file: ',filename,' written from Javascript toolkits array');
     61
     62                         //start writing options
     63                         for (var analysis in this){
     64                                 
     65                                 if(typeof this[analysis] == 'object') options=this[analysis]; else continue;
     66
     67                                 //first write analysis:
     68                                 string += sprintf('\n+%s\n',analysis); //append a + to recognize it's an analysis enum
     69
     70                                 //now, write options
     71                       
     72                                 for(var optionname in options){
     73                                         optionvalue=options[optionname];
     74
     75                                         if (optionvalue.length==0){
     76                                                 //this option has only one argument
     77                                                 string+=sprintf('-%s\n',optionname);
     78                                         }
     79                                         else{
     80                                                 //option with value. value can be string or scalar
     81                                                 if (typeof optionvalue == 'number'){
     82                                                         string+=sprintf('-%s %g\n',optionname,optionvalue);
     83                                                 }
     84                                                 else if (typeof optionvalue == 'string'){
     85                                                         string+=sprintf('-%s %s\n',optionname,optionvalue);
     86                                                 }
     87                                                 else throw Error(sprintf("ToolkitsFile error: option '%s' is not well formatted",optionname));
     88                                         }
     89                                 }
     90                         }
     91                         return string;
     92                 } //}}}
    4993        //properties
    5094        // {{{
  • issm/trunk-jpl/src/m/classes/transient.js

    r19791 r19793  
    7676                        //process requested outputs
    7777                        outputs = this.requested_outputs;
    78                         for (var i=0;i<outputs;i++){
     78                        for (var i=0;i<outputs.length;i++){
    7979                                if (outputs[i] == 'default') {
    8080                                        outputs.splice(i,1);
    81                                         outputs.push(this.defaultoutputs());
     81                                        newoutputs=this.defaultoutputs(md);
     82                                        for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
    8283                                }
    8384                        }                       
    84                         WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray');
     85                        WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum(),'format','StringArray');
    8586                }//}}}
    8687                this.defaultoutputs = function(md) { //{{{
  • issm/trunk-jpl/src/m/classes/verbose.js

    r19791 r19793  
    2929                //BEGINDISP
    3030                console.log(sprintf('verbose class echo:'));
    31                 console.log(sprintf('   %15s : %s','mprocessor',mat2str(verbose.mprocessor)));
    32                 console.log(sprintf('   %15s : %s','module',mat2str(verbose.module)));
    33                 console.log(sprintf('   %15s : %s','solution',mat2str(verbose.solution)));
    34                 console.log(sprintf('   %15s : %s','solver',mat2str(verbose.solver)));
    35                 console.log(sprintf('   %15s : %s','convergence',mat2str(verbose.convergence)));
    36                 console.log(sprintf('   %15s : %s','control',mat2str(verbose.control)));
    37                 console.log(sprintf('   %15s : %s','qmu',mat2str(verbose.qmu)));
    38                 console.log(sprintf('   %15s : %s','autodiff',mat2str(verbose.autodiff)));
    39                 console.log(sprintf('   %15s : %s','smb',mat2str(verbose.smb)));
     31                console.log(sprintf('   %s : %i','mprocessor',this.mprocessor));
     32                console.log(sprintf('   %s : %i','module',this.module));
     33                console.log(sprintf('   %s : %i','solution',this.solution));
     34                console.log(sprintf('   %s : %i','solver',this.solver));
     35                console.log(sprintf('   %s : %i','convergence',this.convergence));
     36                console.log(sprintf('   %s : %i','control',this.control));
     37                console.log(sprintf('   %s : %i','qmu',this.qmu));
     38                console.log(sprintf('   %s : %i','autodiff',this.autodiff));
     39                console.log(sprintf('   %s : %i','smb',this.smb));
    4040                //ENDDISP
    4141        }// }}}
     
    5050                        //BEGINVERB2BIN
    5151                        var binary=0;
    52                         if (verbose.mprocessor) binary=Math.bitOr(binary1);
    53                         if (verbose.module) binary=Math.bitOr(binary2);
    54                         if (verbose.solution) binary=Math.bitOr(binary4);
    55                         if (verbose.solver) binary=Math.bitOr(binary8);
    56                         if (verbose.convergence) binary=Math.bitOr(binary16);
    57                         if (verbose.control) binary=Math.bitOr(binary32);
    58                         if (verbose.qmu) binary=Math.bitOr(binary64);
    59                         if (verbose.autodiff) binary=Math.bitOr(binary128);
    60                         if (verbose.smb) binary=Math.bitOr(binary256);
     52                        if (this.mprocessor) binary=binary|1;
     53                        if (this.module) binary=binary|2;
     54                        if (this.solution) binary=binary|4;
     55                        if (this.solver) binary=binary|8;
     56                        if (this.convergence) binary=binary|16;
     57                        if (this.control) binary=binary|32;
     58                        if (this.qmu) binary=binary|64;
     59                        if (this.autodiff) binary=binary|128;
     60                        if (this.smb) binary=binary|256;
    6161                        //ENDVERB2BIN
    6262                        return binary;
  • issm/trunk-jpl/src/m/io/fileptr.js

    r19791 r19793  
    7373                } //}}}
    7474                this.rawbuffer = function () { //{{{
    75                         return this.buffer;
     75                        return this.buffer.slice(0,this.ptr);
    7676                } //}}}
    7777                this.resize = function () { //{{{
  • issm/trunk-jpl/src/m/plot/processdata.js

    r19759 r19793  
    1515
    1616        //check format
    17         if ( data.length ==0 | data === [] | typeof data === 'number' | data === NaN ){
     17        if ( data.length ==0 | data === [] | typeof data === 'number' | isNaN(data) ){
    1818                throw Error('plotmodel error message: data provided is empty');
    1919        }
  • issm/trunk-jpl/src/m/solve/WriteData.js

    r19791 r19793  
    172172                var s=[data.length,1];
    173173                if(IsArray(data[0]))s[1]=data[0].length;
     174                if(typeof data == 'number'){s[0]=1; s[1]=1}
    174175
    175176                //if matrix = NaN, then do not write anything
  • issm/trunk-jpl/src/m/solve/solve.js

    r19780 r19793  
    107107
    108108        //Write all input files
    109         marshall(md);                                          // bin file
    110         ToolkitsFile(md.toolkits,md.miscellaneous.name + '.toolkits'); // toolkits file
    111         cluster.BuildQueueScript(md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof,md.qmu.isdakota); // queue file
     109        fid = marshall(md);                                          // bin file
     110        toolkitsstring= md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits'); // toolkits file
    112111
    113         //Stop here if batch mode
    114         if (options.getfieldvalue('batch','no') === 'yes'){
    115                 if (md.verbose.solution){
    116                         console.log('batch mode requested: not launching job interactively');
    117                         console.log('launch solution sequence on remote cluster by hand');
     112        if (cluster.classname() != 'local'){ //{{{
     113
     114                throw Error('non local clusters not supported yet!');
     115
     116                cluster.BuildQueueScript(md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof,md.qmu.isdakota); // queue file
     117
     118                //Stop here if batch mode
     119                if (options.getfieldvalue('batch','no') === 'yes'){
     120                        if (md.verbose.solution){
     121                                console.log('batch mode requested: not launching job interactively');
     122                                console.log('launch solution sequence on remote cluster by hand');
     123                        }
     124                        return;
    118125                }
    119                 return;
    120         }
    121126
    122         //Upload all required files
    123         modelname = md.miscellaneous.name;
    124         filelist  = [modelname + '.bin ',modelname + '.toolkits '];
    125         if (ispc){
    126                 filelist.push(modelname + '.bat ');
    127         }
    128         else{
    129                 filelist.push(modelname + '.queue ');
    130         }
     127                //Upload all required files
     128                modelname = md.miscellaneous.name;
     129                filelist  = [modelname + '.bin ',modelname + '.toolkits '];
     130                if (ispc){
     131                        filelist.push(modelname + '.bat ');
     132                }
     133                else{
     134                        filelist.push(modelname + '.queue ');
     135                }
    131136
    132         if (md.qmu.isdakota){
    133                 filelist.push(modelname + '.qmu.in');
    134         }
     137                if (md.qmu.isdakota){
     138                        filelist.push(modelname + '.qmu.in');
     139                }
    135140
    136         if (restart == ''){
    137                 cluster.UploadQueueJob(md.miscellaneous.name,md.private.runtimename,filelist);
    138         }
     141                if (restart == ''){
     142                        cluster.UploadQueueJob(md.miscellaneous.name,md.private.runtimename,filelist);
     143                }
    139144
    140         //launch queue job:
    141         cluster.LaunchQueueJob(md.miscellaneous.name,md.private.runtimename,filelist,restart);
     145                //launch queue job:
     146                cluster.LaunchQueueJob(md.miscellaneous.name,md.private.runtimename,filelist,restart);
    142147
    143         //wait on lock
    144         if (md.settings.waitonlock == 'NaN'){
    145                 //load when user enters 'y'
    146                 console.log('solution launched on remote cluster. log in to detect job completion.');
    147                 throw Error("solve error message: user detection of successfull completion of job not support yet!");
    148                 /*choice=input('Is the job successfully completed? (y/n)','s');
    149                 if ~strcmp(choice,'y'),
    150                         console.log('Results not loaded... exiting');
    151                 else
    152                         md=loadresultsfromcluster(md);
    153                 end*/
    154         }
    155         else if (md.settings.waitonlock>0){
    156                 //we wait for the done file
    157                 done=waitonlock(md);
    158                 if (md.verbose.solution){
    159                         console.log('loading results from cluster');
     148                //wait on lock
     149                if (md.settings.waitonlock == 'NaN'){
     150                        //load when user enters 'y'
     151                        console.log('solution launched on remote cluster. log in to detect job completion.');
     152                        throw Error("solve error message: user detection of successfull completion of job not support yet!");
     153                        /*choice=input('Is the job successfully completed? (y/n)','s');
     154                          if ~strcmp(choice,'y'),
     155                          console.log('Results not loaded... exiting');
     156                          else
     157                          md=loadresultsfromcluster(md);
     158                          end*/
    160159                }
    161                 loadresultsfromcluster(md);
    162         }
    163         else if (md.settings.waitonlock==0){
    164                  console.log('Model results must be loaded manually with md=loadresultsfromcluster(md);');
    165         }
     160                else if (md.settings.waitonlock>0){
     161                        //we wait for the done file
     162                        done=waitonlock(md);
     163                        if (md.verbose.solution){
     164                                console.log('loading results from cluster');
     165                        }
     166                        loadresultsfromcluster(md);
     167                }
     168                else if (md.settings.waitonlock==0){
     169                        console.log('Model results must be loaded manually with md=loadresultsfromcluster(md);');
     170                }
    166171
    167         //post processes qmu results if necessary
    168         if (md.qmu.isdakota){
    169                 /*if ~strncmpi(options.getfieldvalue('keep','y'),'y',1)
    170                         system(['rm -rf qmu' num2str(feature('GetPid'))]);
    171                 end*/
     172                //post processes qmu results if necessary
     173                if (md.qmu.isdakota){
     174                        /*if ~strncmpi(options.getfieldvalue('keep','y'),'y',1)
     175                          system(['rm -rf qmu' num2str(feature('GetPid'))]);
     176                          end*/
     177                }
     178        } //}}}
     179        else{ //if (cluster.classname() == 'local')
     180
     181                /*We are running locally on the machine, using the issm module:*/
     182                console.log('running issm locally');
     183               
     184                //Call issm:
     185                issm(fid, toolkitsstring, solutionstring, md.miscellaneous.name);
    172186        }
    173187}
  • issm/trunk-jpl/src/wrappers/javascript/Makefile.am

    r19787 r19793  
    1414                           ../IssmConfig/IssmConfig.js\
    1515                           ../EnumToString/EnumToString.js\
    16                            ../StringToEnum/StringToEnum.js
     16                           ../StringToEnum/StringToEnum.js\
     17                           ../Issm/issm.js
    1718       
    1819#javascript io{{{
     
    8485                                         ../EnumToString/EnumToString.cpp\
    8586                                         ../StringToEnum/StringToEnum.cpp\
    86                                          ../../c/main/issm.cpp
     87                                         ../Issm/issm.cpp
    8788
    88 IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_ --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriMeshModule','_NodeConnectivityModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_EnumToStringModule','_StringToEnumModule','_main']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1
    89 IssmModule_LDADD = ${deps} $(TRIANGLELIB)
     89IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_  --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriMeshModule','_NodeConnectivityModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_EnumToStringModule','_StringToEnumModule','_IssmModule']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s INVOKE_RUN=0
     90IssmModule_LDADD = ${deps} $(TRIANGLELIB)  $(GSLLIB)
    9091#}}}
  • issm/trunk-jpl/test/NightlyRun/test101.html

    r19791 r19793  
    5050<script type="text/javascript" src="../../src/m/boundaryconditions/SetIceShelfBC.js"></script>
    5151<script type="text/javascript" src="../../src/m/parameterization/setflowequation.js"></script>
    52 <script type="text/javascript" src="../../src/m/classes/clusters/generic.js"></script>
     52<script type="text/javascript" src="../../src/m/classes/clusters/local.js"></script>
    5353<script type="text/javascript" src="../../src/m/parameterization/setmask.js"></script>
    5454<script type="text/javascript" src="../../src/m/consistency/ismodelselfconsistent.js"></script>
     
    8181<script type="text/javascript" src="../../src/wrappers/ElementConnectivity/ElementConnectivity.js"></script>
    8282<script type="text/javascript" src="../../src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.js"></script>
     83<script type="text/javascript" src="../../src/wrappers/Issm/issm.js"></script>
    8384<script type="text/javascript" src="../../build-js/src/wrappers/javascript/IssmModule.js"></script>
    84 <script type="text/javascript" src="../../src/c/main/issm.js"></script>
    8585<script type="text/javascript" src="../../externalpackages/javascript/src/sprintf.js"></script>
    8686<script type="text/javascript" src="../../externalpackages/javascript/src/jquery.min.js"></script>
     
    9797        parameterize(md);
    9898        setflowequation(md,'SSA','all');
     99        md.verbose.solution=1;  md.verbose.convergence=1;
    99100        md=solve(md,StressbalanceSolutionEnum(),'checkconsistency','no');
    100101
    101         /*plotmodel(md,'data',md.initialization.vel,'colorbar','on','data',md.initialization.vx,
    102           'data',md.initialization.temperature, 'data',md.basalforcings.floatingice_melting_rate,'data','mesh');
    103         //var output=issm([5,1,1]);*/
     102        /*plotmodel(md,'data',md.initialization.vel,'colorbar','on','colorbarheight',.5,'data',md.initialization.vx,
     103          'data',md.initialization.temperature, 'data',md.basalforcings.floatingice_melting_rate,'data','mesh');*/
     104        //var output=issm([5,1,1]);
    104105
    105106
  • issm/trunk-jpl/test/Par/SquareShelfConstrained.par

    r19751 r19793  
    1111md.geometry.base=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
    1212md.geometry.surface=md.geometry.base+md.geometry.thickness;
     13md.geometry.bed=md.geometry.base-10;
    1314
    1415%Initial velocity
Note: See TracChangeset for help on using the changeset viewer.