Changeset 12351


Ignore:
Timestamp:
06/04/12 10:17:05 (13 years ago)
Author:
Mathieu Morlighem
Message:

Simplified BuildQueueingScript interface

Location:
issm/trunk-jpl/src/m
Files:
2 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/clusters/acenet.m

    r12326 r12351  
    88classdef acenet
    99    properties (SetAccess=public)
    10                  % {{{1
     10                 % {{{
    1111                 name='glacdyn.ace-net.ca'
    1212                 %name='placentia.ace-net.ca'
     
    2323         end
    2424         methods
    25                  function cluster=acenet(varargin) % {{{1
     25                 function cluster=acenet(varargin) % {{{
    2626                         %use provided options to change fields
    2727                         options=pairoptions(varargin{:});
     
    3434                 end
    3535                 %}}}
    36                  function disp(cluster) % {{{1
     36                 function disp(cluster) % {{{
    3737                         %  display the object
    3838                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    4747                 end
    4848                 %}}}
    49                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     49                 function checkconsistency(cluster,md,solution,analyses) % {{{
    5050
    5151                         available_queues={'debug','shortq','longq'};
     
    5656                 end
    5757                 %}}}
    58                  function BuildQueueScript(cluster,md) % {{{1
     58                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    5959
    60                          %retrieve parameters
    61                          modelname=md.miscellaneous.name;
    62                          solution=md.private.solution;
     60                         if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
     61                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    6362
    64                          %open file for writing:
     63                         %write queuing script
    6564                         fid=fopen([modelname '.queue'],'w');
    66 
    67           %write instructions for launching a job on the cluster
    68           % fprintf(fid,'#!/bin/sh\n');
    6965                         fprintf(fid,'#!/bin/bash\n');
    70           %fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
    71           %         cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname,modelname,modelname);
    7266                         fprintf(fid,'#$ -cwd\n');
    7367          fprintf(fid,'#$ -N issm\n');
    74           %fprintf(fid,'#$ -l h_rt=%i\n',cluster.time);
    7568          fprintf(fid,'#$ -l h_rt=10:0:0\n');
    76           %fprintf(fid,'#$ -l h_rt=1:0:0,test=true\n');
    7769          fprintf(fid,'#$ -pe ompi* %i\n',cluster.np);
    7870          fprintf(fid,'#$ -j y\n');
     
    8173          fprintf(fid,'module load issm\n');
    8274          fprintf(fid,'\n');
    83           %fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    8475          fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
    8576                   cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname,modelname,modelname);
    86 
    87           % fprintf(fid,'#PBS -l select=%i:ncpus=1\n',cluster.np);
    88                          % fprintf(fid,'#PBS -N %s\n',modelname);
    89                          % fprintf(fid,'#PBS -l walltime=%i\n',time*60); %walltime is in seconds.
    90                          % fprintf(fid,'#PBS -q %s\n',queue);
    91                          % fprintf(fid,'#PBS -o %s.outlog \n',modelname);
    92                          % fprintf(fid,'#PBS -e %s.errlog \n',modelname);
    93                          % fprintf(fid,'export PBS_O_WORKDIR=%s\n',cluster.executionpath);
    94                          % fprintf(fid,'cd $PBS_O_WORKDIR\n');
    95                          % fprintf(fid,'export OMP_NUM_THREADS=1\n');
    96                          % fprintf(fid,'ulimit -s unlimited\n');
    97                          % fprintf(fid,'ulimit -c 0\n');
    98                          % fprintf(fid,'/opt/mpich/gm/intel10.1/bin/mpiexec -np %i %s/issm.exe %s %s %s',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    99 
    100                          %close file
    10177                         fclose(fid);
    10278
    10379                 end
    10480                 %}}}
    105                  function LaunchQueueJob(cluster,md,options)% {{{1
     81                 function LaunchQueueJob(cluster,md,options)% {{{
    10682                          %retrieve parameters
    10783          modelname=md.miscellaneous.name;
     
    134110                 end
    135111                 %}}}
    136                  function Download(cluster,md)% {{{1
     112                 function Download(cluster,md)% {{{
    137113
    138114                        %some check
  • issm/trunk-jpl/src/m/classes/clusters/castor.m

    r11867 r12351  
    88classdef castor
    99    properties (SetAccess=public)
    10                  % {{{1
     10                 % {{{
    1111                 name='castor'
    1212                 login='username';
     
    2020         end
    2121         methods
    22                  function cluster=castor(varargin) % {{{1
     22                 function cluster=castor(varargin) % {{{
    2323                         cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
    2424                 end
    2525                 %}}}
    26                  function disp(cluster) % {{{1
     26                 function disp(cluster) % {{{
    2727                         %  display the object
    2828                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    3737                 end
    3838                 %}}}
    39                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     39                 function checkconsistency(cluster,md,solution,analyses) % {{{
    4040
    4141                         available_queues={'shortc','longc'};
     
    4646                 end
    4747                 %}}}
    48                  function BuildQueueScript(cluster,md) % {{{1
     48                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    4949
    50                          %retrieve parameters
    51                          modelname=md.miscellaneous.name;
    52                          solution=md.private.solution;
     50                         if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
     51                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    5352
    54                          %open file for writing:
     53                         %write queuing script
    5554                         fid=fopen([modelname '.queue'],'w');
    56 
    5755                         fprintf(fid,'#!/bin/sh\n');
    5856                         fprintf(fid,'#PBS -l walltime=%i\n',cluster.time*60); %walltime is in seconds.
     
    6462                         fprintf(fid,'#PBS -o %s.outlog \n',modelname);
    6563                         fprintf(fid,'#PBS -e %s.errlog \n',modelname);
    66 
    6764                         fprintf(fid,'export PBS_O_WORKDIR=%s\n',cluster.executionpath);
    6865                         fprintf(fid,'cd $PBS_O_WORKDIR\n');
    6966                         fprintf(fid,'export OMP_NUM_THREADS=1\n');
    7067                         fprintf(fid,'dplace -s1 -c0-%i mpiexec -np %i %s/issm.exe %s %s %s',cluster.np-1,cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    71 
    72                          %close file
    7368                         fclose(fid);
    7469
    7570                 end
    7671                 %}}}
    77                  function LaunchQueueJob(cluster,md,options)% {{{1
     72                 function LaunchQueueJob(cluster,md,options)% {{{
    7873                         
    7974                         %lauch command, to be executed via ssh
     
    10398                 end
    10499                 %}}}
    105                  function Download(cluster,md)% {{{1
     100                 function Download(cluster,md)% {{{
    106101
    107102                        %some check
  • issm/trunk-jpl/src/m/classes/clusters/cosmos.m

    r11867 r12351  
    88classdef cosmos
    99    properties (SetAccess=public)
    10                  % {{{1
     10                 % {{{
    1111                 name='cosmos'
    1212                 login='username';
     
    2020         end
    2121         methods
    22                  function cluster=cosmos(varargin) % {{{1
     22                 function cluster=cosmos(varargin) % {{{
    2323                         cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
    2424                 end
    2525                 %}}}
    26                  function disp(cluster) % {{{1
     26                 function disp(cluster) % {{{
    2727                         %  display the object
    2828                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    3737                 end
    3838                 %}}}
    39                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     39                 function checkconsistency(cluster,md,solution,analyses) % {{{
    4040
    4141                         available_queues={'debug','shortq','longq'};
     
    4646                 end
    4747                 %}}}
    48                  function BuildQueueScript(cluster,md) % {{{1
     48                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    4949
    50                          %retrieve parameters
    51                          modelname=md.miscellaneous.name;
    52                          solution=md.private.solution;
     50                         if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
     51                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    5352
    54                          %open file for writing:
     53                         %write queuing script
    5554                         fid=fopen([modelname '.queue'],'w');
    56 
    5755                         fprintf(fid,'#!/bin/bash\n');
    5856                         fprintf(fid,'#PBS -l select=%i:ncpus=1\n',cluster.np);
     
    6866                         fprintf(fid,'ulimit -c 0\n');
    6967                         fprintf(fid,'/opt/mpich/gm/intel10.1/bin/mpiexec -np %i %s/issm.exe %s %s %s',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    70 
    71                          %close file
    7268                         fclose(fid);
    7369
    7470                 end
    7571                 %}}}
    76                  function LaunchQueueJob(cluster,md,options)% {{{1
     72                 function LaunchQueueJob(cluster,md,options)% {{{
    7773                         
    7874                         %lauch command, to be executed via ssh
     
    10298                 end
    10399                 %}}}
    104                  function Download(cluster,md)% {{{1
     100                 function Download(cluster,md)% {{{
    105101
    106102                        %some check
  • issm/trunk-jpl/src/m/classes/clusters/gemini.m

    r11867 r12351  
    88classdef gemini
    99    properties (SetAccess=public)
    10         % {{{1
     10        % {{{
    1111                name='gemini'
    1212                login='username';
     
    2020    end
    2121    methods
    22                  function cluster=gemini(varargin) % {{{1
     22                 function cluster=gemini(varargin) % {{{
    2323                         cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
    2424                 end
    2525                 %}}}
    26                  function disp(cluster) % {{{1
     26                 function disp(cluster) % {{{
    2727                         %  display the object
    2828                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    3737                 end
    3838                 %}}}
    39                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     39                 function checkconsistency(cluster,md,solution,analyses) % {{{
    4040
    4141                         available_queues={'debug','shortg','longg'};
     
    4646                 end
    4747                 %}}}
    48                  function BuildQueueScript(cluster,md) % {{{1
     48                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    4949
    50                          %retrieve parameters
    51                          modelname=md.miscellaneous.name;
    52                          solution=md.private.solution;
     50                         if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
     51                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    5352
    54                          %open file for writing:
     53                         %write queuing script
    5554                         fid=fopen([modelname '.queue'],'w');
    56 
    5755                         fprintf(fid,'#!/bin/sh\n');
    5856                         fprintf(fid,'#PBS -l walltime=%i\n',cluster.time*60); %walltime is in seconds.
     
    6967                         fprintf(fid,'export OMP_NUM_THREADS=1\n');
    7068                         fprintf(fid,'dplace -s1 -c0-%i mpiexec -np %i %s/issm.exe %s %s %s',cluster.np-1,cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    71 
    72                          %close file
    7369                         fclose(fid);
    7470
    7571                 end
    7672                 %}}}
    77                  function LaunchQueueJob(cluster,md,options)% {{{1
     73                 function LaunchQueueJob(cluster,md,options)% {{{
    7874                         
    7975                         %lauch command, to be executed via ssh
     
    10399                 end
    104100                 %}}}
    105                  function Download(cluster,md)% {{{1
     101                 function Download(cluster,md)% {{{
    106102
    107103                        %some check
  • issm/trunk-jpl/src/m/classes/clusters/generic.m

    r12155 r12351  
    77classdef generic
    88    properties (SetAccess=public)
    9                  % {{{1
     9                 % {{{
    1010                 name='';
    1111                 login='';
     
    2121         end
    2222         methods
    23                  function cluster=generic(varargin) % {{{1
     23                 function cluster=generic(varargin) % {{{
    2424
    2525                         %use provided options to change fields
     
    3636                 end
    3737                 %}}}
    38                  function disp(cluster) % {{{1
     38                 function disp(cluster) % {{{
    3939                         %  display the object
    4040                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    5050                 end
    5151                 %}}}
    52                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     52                 function checkconsistency(cluster,md,solution,analyses) % {{{
    5353                         if cluster.np<1
    5454                                 checkmessage(['number of processors should be at least 1']);
     
    5959                 end
    6060                 %}}}
    61                  function BuildQueueScript(cluster,md) % {{{1
     61                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    6262                 
    63                          %retrieve parameters
    64                          modelname=md.miscellaneous.name;
    65                          solution=md.private.solution;
    66                          isvalgrind=md.debug.valgrind;
    67                          isgprof=md.debug.gprof;
    68 
    69                          %open file for writing:
     63                         %write queuing script
    7064                         if ~ispc,
    7165                                 fid=fopen([modelname '.queue'],'w');
     
    115109                         end
    116110
    117                          if ~md.settings.io_gather,
    118                                  if ~ispc,
    119                                          %concatenate the output files:
     111                         if ~io_gather,
     112                                 if ~ispc, %concatenate the output files:
    120113                                         fprintf(fid,'\ncat %s.outbin.* > %s.outbin',modelname,modelname);
    121114                                 else
    122115                                         error('iogather not supported on windows platforms');
    123116                                 end
    124 
    125117                         end
    126                          
    127                          %close file:
    128118                         fclose(fid);
    129119
     
    133123                                 fid=fopen([modelname '.outlog'],'w'); fclose(fid);
    134124                         end
    135 
    136 
    137125                 end
    138126                 %}}}
    139                  function LaunchQueueJob(cluster,md,options)% {{{1
     127                 function LaunchQueueJob(cluster,md,options)% {{{
    140128                         
    141129                         if ~ispc,
     
    171159
    172160                end %}}}
    173                  function Download(cluster,md)% {{{1
     161                 function Download(cluster,md)% {{{
    174162
    175163                        if ~ispc,
  • issm/trunk-jpl/src/m/classes/clusters/generic.py

    r12155 r12351  
    3636                return string
    3737                #}}}
    38                
    39 
    40 #old matlab
    41 #               function cluster=generic(varargin) % {{{1
    42 #
    43 #                        %use provided options to change fields
    44 #                        options=pairoptions(varargin{:});
    45 #
    46 #                        %get name
    47 #                        if ~exist(options,'name'), error('option ''name'' has not been provided'); end
    48 #                        cluster.name=getfieldvalue(options,'name');
    49 #
    50 #                        %initialize cluster using user settings if provided
    51 #                        if (exist([cluster.name '_settings'])==2), eval([cluster.name '_settings']); end
    52 #
    53 #                        %OK get other fields
    54 #                        for i=1:size(options.list,1),
    55 #                                fieldname=options.list{i,1};
    56 #                                fieldvalue=options.list{i,2};
    57 #                                if ismember(fieldname,properties('generic')),
    58 #                                        cluster.(fieldname)=fieldvalue;
    59 #                                else
    60 #                                        disp(['''' fieldname ''' is not a property of cluster generic']);
    61 #                                end
    62 #                        end
    63 #                end
    64 #                %}}}
    65 #                function checkconsistency(cluster,md,solution,analyses) % {{{1
    66 #                        if cluster.np<1
    67 #                                checkmessage(['number of processors should be at least 1']);
    68 #                        end
    69 #                        if isnan(cluster.np),
    70 #                                checkessage('number of processors should not be NaN!');
    71 #                        end
    72 #                end
    73 #                %}}}
    74 #                function BuildQueueScript(cluster,md) % {{{1
    75 #               
    76 #                        %retrieve parameters
    77 #                        modelname=md.miscellaneous.name;
    78 #                        solution=md.private.solution;
    79 #                        isvalgrind=md.debug.valgrind;
    80 #                        isgprof=md.debug.gprof;
    81 #
    82 #                        %open file for writing:
    83 #                        if ~ispc,
    84 #                                fid=fopen([modelname '.queue'],'w');
    85 #                        else
    86 #                                fid=fopen([modelname '.bat'],'w');
    87 #                        end
    88 #
    89 #                        %write instructions for launching a job on the cluster
    90 #                        if ~ispc,
    91 #                                fprintf(fid,'#!/bin/sh\n');
    92 #                        else
    93 #                                fprintf(fid,'@echo off\n');
    94 #                        end
    95 #                       
    96 #                        if ~isvalgrind,
    97 #                                if cluster.interactive
    98 #                                        if ~ispc,
    99 #                                                fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s ',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    100 #                                        else
    101 #                                                fprintf(fid,'"%s/issm.exe" %s "%s" %s ',cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    102 #                                        end
    103 #                                else
    104 #                                        if ~ispc,
    105 #                                                fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname,modelname,modelname);
    106 #                                        else
    107 #                                                fprintf(fid,'"%s/issm.exe" %s "%s" %s 2> %s.errlog >%s.outlog ',cluster.codepath,EnumToString(solution),cluster.executionpath,modelname,modelname,modelname);
    108 #                                        end
    109 #                                end
    110 #                        else
    111 #                                if ~ispc,
    112 #                                        %Add --gen-suppressions=all to get suppression lines
    113 #                                        fprintf(fid,'LD_PRELOAD=%s \\\n',cluster.valgrindlib);
    114 #                                        fprintf(fid,'mpiexec -np %i %s --leak-check=full --suppressions=%s %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',...
    115 #                                        cluster.np,cluster.valgrind,cluster.valgrindsup, cluster.codepath,EnumToString(solution),cluster.executionpath,modelname,modelname,modelname);
    116 #                                else
    117 #                                        error('valgrind not supported on windows platforms');
    118 #                                end
    119 #                        end
    120 #
    121 #                        if isgprof,
    122 #                                if ~ispc,
    123 #                                        fprintf(fid,'\n gprof %s/issm.exe gmon.out > %s.performance',cluster.codepath,modelname);
    124 #                                else
    125 #                                        error('gprof not supported on windows platforms');
    126 #                                end
    127 #
    128 #                        end
    129 #
    130 #                        if ~md.settings.io_gather,
    131 #                                if ~ispc,
    132 #                                        %concatenate the output files:
    133 #                                        fprintf(fid,'\ncat %s.outbin.* > %s.outbin',modelname,modelname);
    134 #                                else
    135 #                                        error('iogather not supported on windows platforms');
    136 #                                end
    137 #
    138 #                        end
    139 #                       
    140 #                        %close file:
    141 #                        fclose(fid);
    142 #
    143 #                        %in interactive mode, create a run file, and errlog and outlog file
    144 #                        if cluster.interactive,
    145 #                                fid=fopen([modelname '.errlog'],'w'); fclose(fid);
    146 #                                fid=fopen([modelname '.outlog'],'w'); fclose(fid);
    147 #                        end
    148 #
    149 #
    150 #                end
    151 #                %}}}
    152 #                function LaunchQueueJob(cluster,md,options)% {{{1
    153 #                       
    154 #                        if ~ispc,
    155 #                                        %lauch command, to be executed via ssh
    156 #                                        launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' md.private.runtimename ' && mkdir ' md.private.runtimename ...
    157 #                                        ' && cd ' md.private.runtimename ' && mv ../' md.private.runtimename '.tar.gz ./ && tar -zxf ' md.private.runtimename '.tar.gz  && source  ' md.miscellaneous.name '.queue '];
    158 #
    159 #                                        if ~strcmpi(options.batch,'yes'),
    160 #
    161 #                                                %compress the files into one zip.
    162 #                                                compressstring=['tar -zcf ' md.private.runtimename '.tar.gz ' md.miscellaneous.name '.bin ' md.miscellaneous.name '.queue '  md.miscellaneous.name '.petsc '];
    163 #                                                if md.qmu.isdakota,
    164 #                                                        compressstring=[compressstring md.miscellaneous.name '.qmu.in'];
    165 #                                       end
    166 #                                       if cluster.interactive,
    167 #                                               compressstring=[compressstring ' ' md.miscellaneous.name '.errlog ' md.miscellaneous.name '.outlog '];
    168 #                                       end
    169 #                                       system(compressstring);
    170 #
    171 #                                       disp('uploading input file and queueing script');
    172 #                                       issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[md.private.runtimename '.tar.gz']});
    173 #
    174 #                                       disp('launching solution sequence on remote cluster');
    175 #                                       issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
    176 #                               else
    177 #                                       disp('batch mode requested: not launching job interactively');
    178 #                                       disp('launch solution sequence on remote cluster by hand');
    179 #                               end
    180 #                       else
    181 #                               %launch right here, do not compress or archive.
    182 #                               system([md.miscellaneous.name '.bat']);
    183 #                       end
    184 #
    185 #               end %}}}
    186 #                function Download(cluster,md)% {{{1
    187 #
    188 #                       if ~ispc,
    189 #                               %some check
    190 #                               if isempty(md.private.runtimename),
    191 #                                       error('supply runtime name for results to be loaded!');
    192 #                               end
    193 #
    194 #                               %Figure out the  directory where all the files are in:
    195 #                               directory=[cluster.executionpath '/' md.private.runtimename '/'];
    196 #
    197 #                               %What packages are we picking up from remote cluster
    198 #                               packages={[md.miscellaneous.name '.outlog'],[md.miscellaneous.name '.errlog']};
    199 #                               if md.qmu.isdakota,
    200 #                                       packages{end+1}=[md.miscellaneous.name '.qmu.err'];
    201 #                                       packages{end+1}=[md.miscellaneous.name '.qmu.out'];
    202 #                                       if isfield(md.qmu.params,'tabular_graphics_data'),
    203 #                                               if md.qmu.params.tabular_graphics_data==true,
    204 #                                                       packages{end+1}='dakota_tabular.dat';
    205 #                                               end
    206 #                                       end
    207 #                               else
    208 #                                       packages{end+1}=[md.miscellaneous.name '.outbin'];
    209 #                               end
    210 #
    211 #                               %copy files from cluster to present directory
    212 #                               issmscpin(cluster.name, cluster.login, cluster.port, directory, packages);
    213 #                       else
    214 #                               %do nothing!
    215 #                       end
    216 #               end %}}}
    217 #
  • issm/trunk-jpl/src/m/classes/clusters/greenplanet.m

    r11867 r12351  
    88classdef greenplanet
    99    properties (SetAccess=public) 
    10                  % {{{1
     10                 % {{{
    1111                 name='greenplanet'
    1212                 login='';
     
    2424         end
    2525         methods
    26                  function cluster=greenplanet(varargin) % {{{1
     26                 function cluster=greenplanet(varargin) % {{{
    2727
    2828                         %initialize cluster using default settings if provided
     
    3333                 end
    3434                 %}}}
    35                  function disp(cluster) % {{{1
     35                 function disp(cluster) % {{{
    3636                         %  display the object
    3737                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    4848                 end
    4949                 %}}}
    50                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     50                 function checkconsistency(cluster,md,solution,analyses) % {{{
    5151
    5252                         available_queues={'rignot','default'};
     
    6363                 end
    6464                 %}}}
    65                  function BuildQueueScript(cluster,md) % {{{1
     65                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    6666
    67                          %retrieve parameters
    68                          modelname=md.miscellaneous.name;
    69                          solution=md.private.solution;
    70                          isvalgrind=md.debug.valgrind;
     67                         if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
     68                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    7169
    7270                         %compute number of processors
    7371                         cluster.np=cluster.numnodes*cluster.cpuspernode;
    7472
    75                          %open file for writing:
     73                         %write queuing script
    7674                         fid=fopen([modelname '.queue'],'w');
    77 
    7875                         fprintf(fid,'#PBS -S /bin/bash\n');
    7976                         fprintf(fid,'#PBS -N %s\n',modelname);
     
    8481                         fprintf(fid,'#PBS -o %s.outlog \n',modelname);
    8582                         fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
    86 
    8783                         fprintf(fid,'cd %s/%s\n\n',cluster.executionpath,md.private.runtimename);
    8884                         fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    89 
    90                          if ~md.settings.io_gather,
    91                                  %concatenate the output files:
     85                         if ~io_gather, %concatenate the output files:
    9286                                 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
    9387                         end
    94 
    95                          %close file
    9688                         fclose(fid);
    9789
     
    10092                                 fid=fopen([modelname '.run'],'w');
    10193                                 fprintf(fid,'mpiexec -np %i %s/issm.exe %s %s %s\n',cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    102 
    103                                  if ~md.settings.io_gather,
    104                                          %concatenate the output files:
     94                                 if ~io_gather, %concatenate the output files:
    10595                                         fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
    10696                                 end
     
    112102                         end
    113103                 end %}}}
    114                  function LaunchQueueJob(cluster,md,options)% {{{1
     104                 function LaunchQueueJob(cluster,md,options)% {{{
    115105                         
    116106                         %lauch command, to be executed via ssh
     
    152142                 end
    153143                 %}}}
    154                  function Download(cluster,md)% {{{1
     144                 function Download(cluster,md)% {{{
    155145
    156146                        %some check
  • issm/trunk-jpl/src/m/classes/clusters/none.m

    r12030 r12351  
    1111    end
    1212    methods
    13                  function cluster=none(varargin) % {{{1
     13                 function cluster=none(varargin) % {{{
    1414                         error('Cannot assign md.cluster to ''none'': ISSM is not available in serial model anymore');
    1515                 end
  • issm/trunk-jpl/src/m/classes/clusters/pfe.m

    r11867 r12351  
    88classdef pfe
    99    properties (SetAccess=public) 
    10                  % {{{1
     10                 % {{{
    1111                 name='pfe'
    1212                 login='';
     
    2929         end
    3030         methods
    31                  function cluster=pfe(varargin) % {{{1
     31                 function cluster=pfe(varargin) % {{{
    3232
    3333                         %initialize cluster using default settings if provided
     
    3838                 end
    3939                 %}}}
    40                  function disp(cluster) % {{{1
     40                 function disp(cluster) % {{{
    4141                         %  display the object
    4242                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    5656                 end
    5757                 %}}}
    58                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     58                 function checkconsistency(cluster,md,solution,analyses) % {{{
    5959
    6060                         available_queues={'long','normal','debug'};
     
    9696                 end
    9797                 %}}}
    98                  function BuildQueueScript(cluster,md) % {{{1
    99 
    100                          %retrieve parameters
    101                          modelname=md.miscellaneous.name;
    102                          solution=md.private.solution;
    103                          isvalgrind=md.debug.valgrind;
     98                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
     99
     100                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    104101
    105102                         %compute number of processors
    106103                         cluster.np=cluster.numnodes*cluster.cpuspernode;
    107104
    108                          %open file for writing:
     105                         %write queuing script
    109106                         fid=fopen([modelname '.queue'],'w');
    110 
    111107                         fprintf(fid,'#PBS -S /bin/bash\n');
    112108%                        fprintf(fid,'#PBS -N %s\n',modelname);
     
    118114                         fprintf(fid,'#PBS -o %s.outlog \n',modelname);
    119115                         fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
    120 
    121116                         fprintf(fid,'. /usr/share/modules/init/bash\n\n');
    122 
    123117                         fprintf(fid,'module load comp-intel/11.1.046\n');
    124118                         fprintf(fid,'module load mpi/mpt.1.25\n');
    125119                         fprintf(fid,'module load math/intel_mkl_64_10.0.011\n\n');
    126 
    127120                         fprintf(fid,'export PATH="$PATH:."\n\n');
    128121                         fprintf(fid,'export MPI_GROUP_MAX=64\n\n');
    129 
    130122                         fprintf(fid,'cd $PBS_O_WORKDIR\n\n');
    131 
    132123                         fprintf(fid,'mpiexec -np %i %s/issm.exe %s $PBS_O_WORKDIR %s\n',cluster.np,cluster.codepath,EnumToString(solution),modelname);
    133 
    134                          if ~md.settings.io_gather,
    135                                  %concatenate the output files:
     124                         if ~io_gather, %concatenate the output files:
    136125                                 fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
    137126                         end
    138 
    139                          %close file
    140127                         fclose(fid);
    141128
     
    148135                                         fprintf(fid,'mpiexec -np %i valgrind --leak-check=full %s/issm.exe %s $PBS_O_WORKDIR %s\n',cluster.np,cluster.codepath,EnumToString(solution),modelname);
    149136                                 end
    150 
    151                                  if ~md.settings.io_gather,
    152                                          %concatenate the output files:
     137                                 if ~io_gather, %concatenate the output files:
    153138                                         fprintf(fid,'cat %s.outbin.* > %s.outbin',modelname,modelname);
    154139                                 end
     
    160145                         end
    161146                 end %}}}
    162                  function LaunchQueueJob(cluster,md,options)% {{{1
     147                 function LaunchQueueJob(cluster,md,options)% {{{
    163148                         
    164149                         %lauch command, to be executed via ssh
     
    204189                 end
    205190                 %}}}
    206                  function Download(cluster,md)% {{{1
     191                 function Download(cluster,md)% {{{
    207192
    208193                        %some check
  • issm/trunk-jpl/src/m/classes/clusters/pollux.m

    r11867 r12351  
    88classdef pollux
    99    properties (SetAccess=public)
    10                  % {{{1
     10                 % {{{
    1111                 name='pollux'
    1212                 login='username';
     
    2020         end
    2121         methods
    22                  function cluster=pollux(varargin) % {{{1
     22                 function cluster=pollux(varargin) % {{{
    2323                         cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
    2424                 end
    2525                 %}}}
    26                  function disp(cluster) % {{{1
     26                 function disp(cluster) % {{{
    2727                         %  display the object
    2828                         disp(sprintf('class ''%s'' object ''%s'' = ',class(cluster),inputname(1)));
     
    3737                 end
    3838                 %}}}
    39                  function checkconsistency(cluster,md,solution,analyses) % {{{1
     39                 function checkconsistency(cluster,md,solution,analyses) % {{{
    4040
    4141                         available_queues={'shortp','longp'};
     
    4646                 end
    4747                 %}}}
    48                  function BuildQueueScript(cluster,md) % {{{1
     48                 function BuildQueueScript(cluster,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
    4949
    50                          %retrieve parameters
    51                          modelname=md.miscellaneous.name;
    52                          solution=md.private.solution;
     50                         if(isvalgrind), disp('valgrind not supported by cluster, ignoring...'); end
     51                         if(isgprof),    disp('gprof not supported by cluster, ignoring...'); end
    5352
    54                          %open file for writing:
     53                         %write queuing script
    5554                         fid=fopen([modelname '.queue'],'w');
    56 
    5755                         fprintf(fid,'#!/bin/sh\n');
    5856                         fprintf(fid,'#PBS -l walltime=%i\n',cluster.time*60); %walltime is in seconds.
     
    6462                         fprintf(fid,'#PBS -o %s.outlog \n',modelname);
    6563                         fprintf(fid,'#PBS -e %s.errlog \n',modelname);
    66 
    6764                         fprintf(fid,'export PBS_O_WORKDIR=%s\n',cluster.executionpath);
    6865                         fprintf(fid,'cd $PBS_O_WORKDIR\n');
    6966                         fprintf(fid,'export OMP_NUM_THREADS=1\n');
    7067                         fprintf(fid,'dplace -s1 -c0-%i mpiexec -np %i %s/issm.exe %s %s %s',cluster.np-1,cluster.np,cluster.codepath,EnumToString(solution),cluster.executionpath,modelname);
    71 
    72                          %close file
    7368                         fclose(fid);
    7469
    7570                 end
    7671                 %}}}
    77                  function LaunchQueueJob(cluster,md,options)% {{{1
     72                 function LaunchQueueJob(cluster,md,options)% {{{
    7873                         
    7974                         %lauch command, to be executed via ssh
     
    10398                 end
    10499                 %}}}
    105                  function Download(cluster,md)% {{{1
     100                 function Download(cluster,md)% {{{
    106101
    107102                        %some check
  • issm/trunk-jpl/src/m/classes/model/model.m

    r12335 r12351  
    242242                         if isfield(structmd,'pressureload'), md.diagnostic.icefront=structmd.pressureload; end
    243243                         if isfield(structmd,'diagnostic_ref'), md.diagnostic.referential=structmd.diagnostic_ref; end
    244 
    245 
    246 
    247 
     244                         if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
     245                         if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
     246                                 
    248247                         %Field changes
    249248                         if (isfield(structmd,'type') & ischar(structmd.type)),
     
    356355                                 md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
    357356                         end
    358                          if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
    359                          if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
    360                                  
     357
    361358                 end% }}}
    362359                 function md = setdefaultparameters(md) % {{{1
  • issm/trunk-jpl/src/m/classes/pairoptions.m

    r11872 r12351  
    223223                        end
    224224                end % }}}
     225                function marshall(obj,fid)% {{{
     226                        disp('No options marshalled for now');
     227                        for i=1:size(obj.list,1),
     228                                name  = obj.list{i,1};
     229                                value = obj.list{i,2};
     230
     231                                if (isnumeric(value) & numel(value)==1),
     232                                        %
     233                                elseif ischar(value),
     234                                        %
     235                                else
     236                                        error(['Cannot marshall option ' name ': format not supported yet']);
     237                                end
     238                        end
     239                end % }}}
    225240        end
    226241end
  • issm/trunk-jpl/src/m/model/solve.m

    r10969 r12351  
    2424%      md=solve(md,DiagnosticSolutionEnum);
    2525
    26 %recover options
     26%recover and process solve options
    2727options=pairoptions(varargin{:},'solution_type',solutionenum);
    28 
    29 %add default options
    3028options=process_solve_options(options);
    3129
     
    4644end
    4745
    48 %if running qmu analysis, some preprocessing of dakota files using
    49 %models fields needs to be carried out.
     46%if running qmu analysis, some preprocessing of dakota files using models
     47%fields needs to be carried out.
    5048if md.qmu.isdakota,
    5149        md=preqmu(md,options);
    5250end
    5351
    54 %Save model as is (in case of a crash)
    55 assignin('base',inputname(1),md);
    56 
    5752%flaim analysis
    58 if (md.private.solution == FlaimSolutionEnum)
     53if (options.solution_type == FlaimSolutionEnum)
    5954        md=flaim_sol(md,options);
    6055        md.private.solution=EnumToString(options.solution_type);
     
    6257end
    6358
    64 %Marshall model data into a binary file.
    65 marshall(md);
    66 
    67 %write a template file for issm to use, in parallel
    68 PetscFile(md.solver,[md.miscellaneous.name '.petsc']);
    69 
    70 %If running in parallel, we have a different way of launching the solution
    71 %sequences.
    72 if ~strcmpi(md.cluster.name,'none'),
    73         md=solveparallel(md,options);
     59%Do we load results only?
     60if options.loadonly, 
     61        md=loadresultsfromcluster(md);
    7462        return;
    7563end
    7664
    77 %Launch correct solution sequence
    78 md=issm(md,md.private.solution);
     65%Wite all input files
     66marshall(md);                                          % bin file
     67PetscFile(md.solver,[md.miscellaneous.name '.petsc']); % petsc file
    7968
    80 %post processes qmu results if necessary
    81 if md.qmu.isdakota,
    82         md=postqmu(md);
    83         cd ..
    84         if ~strncmpi(options.keep,'y',1)
    85                 system(['rm -rf qmu' num2str(feature('GetPid'))]);
    86         end
     69%Launch job on remote cluster
     70cluster=md.cluster;
     71
     72%we need to make sure we have PETSC support, otherwise, we run with only one cpu:
     73if ~ispetsc,
     74        disp('PETSC support not included, running on 1 cpu only!');
     75        cluster.np=1;
    8776end
    8877
    89 %convert analysis type to string finally
    90 md.private.solution=EnumToString(options.solution_type);
     78%First, build a runtime name that is unique
     79c=clock; md.private.runtimename=sprintf('%s-%02i-%02i-%04i-%02i-%02i-%02i-%i',md.miscellaneous.name,c(2),c(3),c(1),c(4),c(5),floor(c(6)),feature('GetPid'));
     80
     81BuildQueueScript(cluster,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof);
     82LaunchQueueJob(cluster,md,options);
     83
     84if ~strcmpi(options.upload,'on'), %did we even try to run? if so, wait on lock
     85
     86        %Do we return, or just wait for results?
     87        if (md.settings.waitonlock>0 &  ~strcmpi(options.batch,'yes')),
     88                %we wait for the done file
     89                islock=waitonlock(md);
     90                if islock==0, %no results to be loaded
     91                        disp('The results must be loaded manually with md=loadresultsfromcluster(md).');
     92                else          %load results
     93                        disp('loading results from cluster');
     94                        md=loadresultsfromcluster(md);
     95                end
     96        end
     97
     98        %post processes qmu results if necessary
     99        if md.qmu.isdakota,
     100                if ~strncmpi(options.keep,'y',1)
     101                        system(['rm -rf qmu' num2str(feature('GetPid'))]);
     102                end
     103        end
     104else
     105        disp('solve done uploading test decks');
     106end
Note: See TracChangeset for help on using the changeset viewer.