Changeset 24249 for issm/trunk-jpl/test/NightlyRun/test4003.m
- Timestamp:
- 10/17/19 16:23:25 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/test/NightlyRun/test4003.m
r24143 r24249 16 16 presentdirectory=pwd; 17 17 18 % {{{ Parameters: 18 % {{{ Parameters: 19 19 if perform(org,'Parameters'), 20 20 Nx=3; %number of longitude cells … … 28 28 dLat=1; %latitude grid spacing 29 29 delZ=10; %thickness of vertical levels 30 icefront_position_ratio=.75; 30 icefront_position_ratio=.75; 31 31 ice_thickness=1000; 32 32 rho_ice=917; … … 42 42 mlSalt = 33.4; % open boundary salinity (PSU) 43 43 mlTheta = -1.9; % open boundary potential temperature (deg C) 44 obcUvel = -0.1; % open boundary velocity (m/s) 44 obcUvel = -0.1; % open boundary velocity (m/s) 45 45 46 46 MITgcmDeltaT=600; % MITgcm time step in seconds … … 69 69 end 70 70 % }}} 71 % {{{ Bathymetry: 71 % {{{ Bathymetry: 72 72 if perform(org,'Bathymetry'), 73 73 … … 94 94 end 95 95 % }}} 96 % {{{ IceSheetGeometry: 96 % {{{ IceSheetGeometry: 97 97 if perform(org,'IceSheetGeometry'), 98 98 99 99 loaddata(org,'Parameters'); 100 100 loaddata(org,'Bathymetry'); … … 102 102 latmax=max(lat(:)); 103 103 104 %put ice_thickness constant layer of ice over the bathymetry, unless it floats: 104 %put ice_thickness constant layer of ice over the bathymetry, unless it floats: 105 105 s=size(bathymetry); 106 106 thickness=ice_thickness*ones(s); 107 107 108 %figure out ice shelf: 108 %figure out ice shelf: 109 109 pos=find(-di*thickness>bathymetry); 110 110 iceshelf_mask=zeros(s); … … 116 116 iceshelf_mask(pos)=0; 117 117 118 %compute draft of ice shelf: 118 %compute draft of ice shelf: 119 119 draft=bathymetry; 120 120 pos=find(iceshelf_mask); 121 121 draft(pos)=-di*thickness(pos); 122 pos=find(~ice_mask); 122 pos=find(~ice_mask); 123 123 draft(pos)=0; 124 124 … … 128 128 129 129 %Configure MITgcm 130 % {{{ GetMITgcm: 130 % {{{ GetMITgcm: 131 131 if perform(org,'GetMITgcm'), 132 132 system([pwd '/../MITgcm/get_mitgcm_dngoldberg.sh']); 133 133 end 134 134 % }}} 135 % {{{ BuildMITgcm: 135 % {{{ BuildMITgcm: 136 136 if perform(org,'BuildMITgcm'), 137 137 system(['../MITgcm/build_4003.sh generic ' pwd '/../MITgcm']); … … 139 139 % }}} 140 140 addpath(recursivepath([pwd '/../MITgcm'])); 141 % {{{ RunUncoupledMITgcm: 141 % {{{ RunUncoupledMITgcm: 142 142 if perform(org,'RunUncoupledMITgcm'), 143 143 % rename previous run directory and create new one … … 161 161 162 162 %Configure ISSM 163 % {{{ CreateMesh: 163 % {{{ CreateMesh: 164 164 if perform(org,'CreateMesh'), 165 166 %create model: 165 166 %create model: 167 167 md=model(); 168 169 %Grab lat,long from MITgcm: 168 169 %Grab lat,long from MITgcm: 170 170 long=readbin('run/XG.data',[3 200]); 171 171 long=[long long(:,end)]; long=[long; -105.1250*ones(1,size(long,2))]; … … 173 173 lat=[lat -73.8832*ones(size(lat,1),1)]; lat=[lat; lat(end,:)]; 174 174 175 %project lat,long: 175 %project lat,long: 176 176 [x,y]=ll2xy(lat(:),long(:),-1); 177 177 … … 179 179 index=[]; 180 180 % C D 181 % A B 181 % A B 182 182 for j=1:Ny-1, 183 for i=1:Nx-1, 183 for i=1:Nx-1, 184 184 A=(j-1)*Nx+i; 185 185 B=(j-1)*Nx+i+1; … … 191 191 end 192 192 193 %fill mesh and model: 193 %fill mesh and model: 194 194 md=meshconvert(md,index,x,y); 195 195 md.mesh.lat=lat(:); … … 200 200 end 201 201 % }}} 202 % {{{ MeshGeometry: 202 % {{{ MeshGeometry: 203 203 if perform(org,'MeshGeometry'), 204 204 205 205 loaddata(org,'CreateMesh'); 206 206 207 %transfer to vertices: 207 %transfer to vertices: 208 208 bathymetry=readbin('run/bathy.box',[3 200],1,'real*8'); 209 209 bathymetry=[bathymetry bathymetry(:,end)]; bathymetry=[bathymetry(1,:); bathymetry]; … … 214 214 thickness=[thickness thickness(:,end)]; thickness=[thickness; thickness(end,:)]; 215 215 216 %start filling some of the fields 216 %start filling some of the fields 217 217 md.geometry.bed=bathymetry(:); 218 218 md.geometry.thickness=thickness(:); 219 md.geometry.base=-917/1028*md.geometry.thickness; 219 md.geometry.base=-917/1028*md.geometry.thickness; 220 220 md.geometry.surface=md.geometry.base+md.geometry.thickness; 221 221 222 %nothing passes icefront: 222 %nothing passes icefront: 223 223 pos=find((~ice_mask(:) & ice_mask(:)~=0) | thickness(:)==0); 224 224 md.geometry.thickness(pos)=1; … … 226 226 md.geometry.base(pos)=-di*md.geometry.thickness(pos); 227 227 228 %level sets: 228 %level sets: 229 229 md.mask.groundedice_levelset=iceshelf_mask(:); 230 230 md.mask.ice_levelset=-ones(md.mesh.numberofvertices,1); 231 231 232 pos=find(~ice_mask(:) & thickness(:)==0); md.mask.ice_levelset(pos)=1; 232 pos=find(~ice_mask(:) & thickness(:)==0); md.mask.ice_levelset(pos)=1; 233 233 234 234 savemodel(org,md); 235 235 end 236 236 % }}} 237 % {{{ ParameterizeIce: 237 % {{{ ParameterizeIce: 238 238 if perform(org,'ParameterizeIce'), 239 239 240 240 loaddata(org,'MeshGeometry'); 241 241 … … 243 243 md.miscellaneous.name='test4003'; 244 244 245 %initial velocity: 245 %initial velocity: 246 246 md.initialization.vx=zeros(md.mesh.numberofvertices,1); 247 247 md.initialization.vy=zeros(md.mesh.numberofvertices,1); 248 248 md.initialization.vz=zeros(md.mesh.numberofvertices,1); 249 249 250 %friction: 250 %friction: 251 251 md.friction.coefficient=0*ones(md.mesh.numberofvertices,1); 252 252 pos=find(md.mask.groundedice_levelset>0); … … 260 260 md.smb.mass_balance = 0*ones(md.mesh.numberofvertices,1); 261 261 262 %Flow law 262 %Flow law 263 263 md.materials.rheology_B=paterson(md.initialization.temperature); 264 264 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1); 265 265 md.damage.D=zeros(md.mesh.numberofvertices,1); 266 266 md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1); 267 267 268 268 %the spcs going 269 269 md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1); … … 272 272 md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6); 273 273 md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3); 274 md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1); 275 276 %get some flux at the ice divide: 274 md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1); 275 276 %get some flux at the ice divide: 277 277 pos=find(md.mesh.lat==min(md.mesh.lat)); 278 278 md.masstransport.spcthickness(pos)=md.geometry.thickness(pos); … … 280 280 md.stressbalance.spcvy(pos)=0; 281 281 282 %deal with boundaries, excluding icefront: 282 %deal with boundaries, excluding icefront: 283 283 pos=find(md.mesh.long==min(md.mesh.long) | md.mesh.long==max(md.mesh.long)); 284 284 md.stressbalance.spcvy(pos)=0; … … 295 295 md.basalforcings.geothermalflux=.064*ones(md.mesh.numberofvertices,1); 296 296 297 %flow equations: 297 %flow equations: 298 298 md=setflowequation(md,'SSA','all'); 299 299 … … 301 301 end 302 302 % }}} 303 % {{{ RunUncoupledISSM: 303 % {{{ RunUncoupledISSM: 304 304 if perform(org,'RunUncoupledISSM'), 305 305 306 306 loaddata(org,'Parameters'); 307 307 loaddata(org,'ParameterizeIce'); 308 308 309 %timestepping: 309 %timestepping: 310 310 md.timestepping.final_time=100; 311 311 md.timestepping.time_step=0.5; … … 327 327 328 328 %Run MITgcm/ISSM 329 % {{{ RunCoupledMITgcmISSM: 329 % {{{ RunCoupledMITgcmISSM: 330 330 if perform(org,'RunCoupledMITgcmISSM'), 331 331 332 332 loaddata(org,'Parameters'); 333 333 loaddata(org,'ParameterizeIce'); … … 352 352 353 353 % }}} 354 % {{{ prepare MITgcm 354 % {{{ prepare MITgcm 355 355 % rename previous run directory and create new one 356 356 if exist ('run.old') … … 379 379 end 380 380 % }}} 381 % {{{ RunCoupledMITgcmISSMMatlabCoupling: 381 % {{{ RunCoupledMITgcmISSMMatlabCoupling: 382 382 if perform(org,'RunCoupledMITgcmISSMMatlabCoupling'), 383 383 384 %load data: 384 %load data: 385 385 loaddata(org,'Parameters'); 386 386 loaddata(org,'ParameterizeIce'); … … 390 390 floor(time_step*y2s*async_step_MITgcm_multiplier/MITgcmDeltaT)); 391 391 392 % {{{ prepare MITgcm 392 % {{{ prepare MITgcm 393 393 % rename previous run directory and create new one 394 394 if exist ('run.old') … … 449 449 tline = fgetl(fidi); 450 450 if ~ischar(tline), break, end 451 %do the change here: 451 %do the change here: 452 452 if strcmpi(tline,' OB_Iwest = 40*1,'), 453 453 fprintf(fido,'%s%i%s\n',' OB_Iwest = ',Ny,'*1,'); … … 467 467 writebin('run/bathymetry.bin',bathymetry); 468 468 % }}} 469 469 470 470 % {{{ ISSM settings: 471 471 472 setenv('DYLD_LIBRARY_PATH', '/usr/local/gfortran/lib') 473 %timestepping: 472 setenv('DYLD_LIBRARY_PATH', '/usr/local/gfortran/lib') 473 %timestepping: 474 474 md.timestepping.start_time=start_time; 475 475 md.timestepping.final_time=final_time; … … 499 499 writebin('run/icetopo.bin',draft); 500 500 501 % {{{ generate MITgcm parameter file data 501 % {{{ generate MITgcm parameter file data 502 502 fidi=fopen('../MITgcm/input/data','r'); 503 503 fido=fopen('run/data','w'); … … 507 507 tline = fgetl(fidi); 508 508 if ~ischar(tline), break, end 509 %do the change here: 509 %do the change here: 510 510 if strcmpi(tline,' xgOrigin = 0.0,'), 511 511 fprintf(fido,'%s%i%s\n',' xgOrigin = ',xgOrigin,','); … … 578 578 tmp(find(tmp<0))=0; 579 579 [im jm]=find(tmp); % horizontal indices where there is melt 580 580 581 581 % Extrapolate T/S to locations where ice shelf retreated 582 582 for i=1:length(im) … … 612 612 % }}} 613 613 614 % {{{ system call to run MITgcm 614 % {{{ system call to run MITgcm 615 615 cd run 616 616 eval(['!mpiexec -np ' int2str(nPx*nPy) ' ./mitgcmuv']); … … 638 638 md.basalforcings.floatingice_melting_rate=melting_rate; 639 639 640 % {{{ run ISSM and recover results 640 % {{{ run ISSM and recover results 641 641 642 642 md.timestepping.start_time=t; … … 655 655 md.mask.groundedice_levelset=md.results.TransientSolution(end).MaskGroundediceLevelset; 656 656 md.results.TransientSolution(end).FloatingiceMeltingRate=md.basalforcings.floatingice_melting_rate; 657 657 658 658 %save these results in the model, otherwise, they'll be wiped out 659 659 results(end+1)=md.results; … … 681 681 'Melting2','Vx3','Vy3','Thickness3','Base3','MaskGroundediceLevelset3','FloatingiceMeltingRate3',... 682 682 'Melting3','Vx4','Vy4','Thickness4','Base4','MaskGroundediceLevelset4','FloatingiceMeltingRate4','Melting4'}; 683 field_tolerances={2e-13,1e-13, 5e-13,5e-13,1e-13,1e-13,1e-13,1e-12,...683 field_tolerances={2e-13,1e-13,6e-13,6e-13,1e-13,1e-13,1e-13,1e-12,... 684 684 1e-13, 1e-12, 1e-12, 1e-13, 1e-13, 1e-13, 1e-12,... 685 685 1e-13, 1e-12, 1e-12, 1e-13, 1e-13, 1e-13, 1e-12, 1e-13 };
Note:
See TracChangeset
for help on using the changeset viewer.