Changeset 12878 for issm/branches/trunk-jpl-damage/src/m/model/solve.m
- Timestamp:
- 08/02/12 17:13:12 (13 years ago)
- Location:
- issm/branches/trunk-jpl-damage
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/branches/trunk-jpl-damage
- Property svn:mergeinfo changed
-
issm/branches/trunk-jpl-damage/src/m/model/solve.m
r10969 r12878 24 24 % md=solve(md,DiagnosticSolutionEnum); 25 25 26 %recover options26 %recover and process solve options 27 27 options=pairoptions(varargin{:},'solution_type',solutionenum); 28 29 %add default options30 28 options=process_solve_options(options); 31 29 32 30 %recover some fields 33 31 md.private.solution=options.solution_type; 32 cluster=md.cluster; 34 33 35 34 %check model consistency 36 35 disp('checking model consistency'); 37 36 if (solutionenum == FlaimSolutionEnum) 38 m odelconsistency(true);39 md .mesh.checkconsistency(md,solutionenum);40 md .flaim.checkconsistency(md,solutionenum);41 if ~modelconsistency()42 error(' 37 md.private.isconsistent=true; 38 md=checkconsistency(md.mesh,md,solutionenum); 39 md=checkconsistency(md.flaim,md,solutionenum); 40 if md.private.isconsistent==false, 41 error('Model not consistent, see messages above'); 43 42 end 44 43 else … … 46 45 end 47 46 48 %if running qmu analysis, some preprocessing of dakota files using 49 %models fields needs to be carried out. 47 %First, build a runtime name that is unique 48 c=clock; 49 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')); 50 51 %if running qmu analysis, some preprocessing of dakota files using models 52 %fields needs to be carried out. 50 53 if md.qmu.isdakota, 51 54 md=preqmu(md,options); 52 55 end 53 56 54 %Save model as is (in case of a crash)55 assignin('base',inputname(1),md);56 57 57 %flaim analysis 58 if ( md.private.solution== FlaimSolutionEnum)58 if (options.solution_type == FlaimSolutionEnum) 59 59 md=flaim_sol(md,options); 60 60 md.private.solution=EnumToString(options.solution_type); … … 62 62 end 63 63 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); 64 %Do we load results only? 65 if options.loadonly, 66 md=loadresultsfromcluster(md); 74 67 return; 75 68 end 76 69 77 %Launch correct solution sequence 78 md=issm(md,md.private.solution); 70 %Wite all input files 71 marshall(md); % bin file 72 PetscFile(md.solver,[md.miscellaneous.name '.petsc']); % petsc file 73 BuildQueueScript(cluster,md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof); % queue file 74 75 %we need to make sure we have PETSC support, otherwise, we run with only one cpu: 76 if ~ispetsc, 77 disp('PETSC support not included, running on 1 cpu only!'); 78 cluster.np=1; 79 end 80 81 %Stop here if batch mode 82 if strcmpi(options.batch,'yes') 83 disp('batch mode requested: not launching job interactively'); 84 disp('launch solution sequence on remote cluster by hand'); 85 return; 86 end 87 88 %Launch job 89 modelname = md.miscellaneous.name; 90 filelist = {[modelname '.bin '] [modelname '.petsc '] [modelname '.queue ']}; 91 if md.qmu.isdakota, 92 filelist{end+1} = [modelname '.qmu.in']; 93 end 94 LaunchQueueJob(cluster,md.miscellaneous.name,md.private.runtimename,filelist); 95 96 %did we even try to run? if so, wait on lock 97 if strcmpi(options.upload,'on'), 98 disp('solve done uploading test decks'); 99 return; 100 end 101 102 %wait on lock 103 if md.settings.waitonlock>0, 104 %we wait for the done file 105 islock=waitonlock(md); 106 if islock==0, %no results to be loaded 107 disp('The results must be loaded manually with md=loadresultsfromcluster(md).'); 108 else %load results 109 disp('loading results from cluster'); 110 md=loadresultsfromcluster(md); 111 end 112 end 79 113 80 114 %post processes qmu results if necessary 81 115 if md.qmu.isdakota, 82 md=postqmu(md);83 cd ..84 116 if ~strncmpi(options.keep,'y',1) 85 117 system(['rm -rf qmu' num2str(feature('GetPid'))]); 86 118 end 87 119 end 88 89 %convert analysis type to string finally90 md.private.solution=EnumToString(options.solution_type);
Note:
See TracChangeset
for help on using the changeset viewer.