Changeset 908
- Timestamp:
- 06/11/09 14:54:23 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/test/Validation/RoundIceSheet/Circ.par
r16 r908 1 2 1 %Ok, start defining model parameters here 3 2 4 %material parameters 5 md.g=9.81;6 md.rho_ice=910;7 md.rho_water=1023;8 di=md.rho_ice/md.rho_water;9 md.yts=365*24*3600;10 md.heatcapacity=2009;11 md.thermalconductivity=2.2; %W/mK 12 md.beta=9.8*10^-8;3 disp(' creating thickness'); 4 hmin=0.01; 5 hmax=2756.7; 6 radius=(sqrt((md.x).^2+(md.y).^2)); 7 radiusmax=max(radius); 8 md.thickness=hmin*ones(size(md.x,1),1)+hmax*(4*((1/2)^(4/3)*ones(size(md.x,1),1)-((radius)./(2*radiusmax)).^(4/3))).^(3/8); 9 md.firn_layer=10*ones(md.numberofgrids,1); 10 md.bed=0*md.thickness; 11 md.surface=md.bed+md.thickness; 13 12 14 %Solution parameters 15 %parallelization 16 client_server_mode='no'; 17 md.cluster='none'; 18 md.np=2; 19 md.time=1; 20 md.exclusive=0; 13 disp(' creating drag'); 14 md.drag_type=2; %0 none 1 plastic 2 viscous 15 md.drag=20*ones(md.numberofgrids,1); %q=1. %no drag is specified in the analytical solution 16 %Take care of iceshelves: no basal drag 17 pos=find(md.elementoniceshelf); 18 md.drag(md.elements(pos,:))=0; 19 md.p=ones(md.numberofelements,1); 20 md.q=ones(md.numberofelements,1); 21 21 22 %statics 23 md.eps_rel=0.01; 24 md.eps_abs=10; 25 md.penalty_offset=3.5; 26 md.lowmem=1; 27 if md.numberofgrids<1000000, 28 md.sparsity=.001; 29 else 30 md.sparsity=.0001; 31 end 22 disp(' creating temperatures'); 23 md.observed_temperature=(273-20)*ones(md.numberofgrids,1); 32 24 33 %dynamics 34 md.dt=1*md.yts; %1 year 35 md.ndt=md.dt*10; 36 md.artificial_diffusivity=1; 25 disp(' creating flow law paramter'); 26 md.B=6.81*10^(7)*ones(md.numberofgrids,1); %to have the same B as the analytical solution 27 md.n=3*ones(md.numberofelements,1); 37 28 38 %control 39 md.control_type={'drag'}; %'drag', 'B' 40 md.nsteps=5; 41 md.tolx=10^-4; 42 md.maxiter=20; 43 md.optscal=10; 44 md.fit='logarithmic'; %'absolute','relative','logarithmic' 45 md.meanvel=1000/md.yts; %1000 meters/year 46 md.epsvel=eps; 29 disp(' creating accumulation rates'); 30 md.accumulation=0.3*ones(md.numberofgrids,1)/md.yts; %1m/a 47 31 48 disp(' creating thickness'); 49 hmin=0.01; 50 hmax=2756.7; 51 radius=(sqrt((md.x).^2+(md.y).^2)); 52 radiusmax=max(radius); 53 md.thickness=hmin*ones(size(md.x,1),1)+hmax*(4*((1/2)^(4/3)*ones(size(md.x,1),1)-((radius)./(2*radiusmax)).^(4/3))).^(3/8); 54 md.firn_layer=10*ones(md.numberofgrids,1); 55 md.bed=0*md.thickness; 56 md.surface=md.bed+md.thickness; 32 disp(' creating velocities'); 33 constant=0.3; 34 md.vx_obs=constant/2*md.x.*(md.thickness).^-1; 35 md.vy_obs=constant/2*md.y.*(md.thickness).^-1; 36 md.vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2)); 57 37 58 disp(' creating drag'); 59 md.drag_type=2; %0 none 1 plastic 2 viscous 60 md.drag=20*ones(md.numberofgrids,1); %q=1. %no drag is specified in the analytical solution 61 %Take care of iceshelves: no basal drag 62 pos=find(md.elementoniceshelf); 63 md.drag(md.elements(pos,:))=0; 64 md.p=ones(md.numberofelements,1); 65 md.q=ones(md.numberofelements,1); 38 %Deal with boundary conditions: 39 disp(' boundary conditions for diagnostic model: '); 40 %Build gridonicefront, array of boundary grids belonging to the icefront: 41 gridonicefront=double(md.gridonboundary); 66 42 67 disp(' creating temperatures'); 68 md.observed_temperature=(273-20)*ones(md.numberofgrids,1); 43 md.gridondirichlet_diag=zeros(md.numberofgrids,1); 44 pos=find(md.gridonboundary & ~gridonicefront);md.gridondirichlet_diag(pos)=1; 45 md.dirichletvalues_diag=zeros(md.numberofgrids,2); 69 46 70 disp(' creating flow law paramter');71 md.B=6.81*10^(7)*ones(md.numberofgrids,1); %to have the same B as the analytical solution 72 md.n=3*ones(md.numberofelements,1); 47 radius=sqrt((md.x).*md.x+(md.y).*md.y); 48 pos=find(radius==min(radius));md.gridondirichlet_diag(pos)=1; 49 md.x(pos)=0; md.y(pos)=0; %the closest node to the center is changed to be exactly at the center 73 50 74 disp(' creating accumulation rates'); 75 md.accumulation=0.3*ones(md.numberofgrids,1)/md.yts; %1m/a 51 pos=find(gridonicefront(md.segments(:,1)) | gridonicefront(md.segments(:,2))); 52 md.segmentonneumann_diag=md.segments(pos,:); 53 md.neumannvalues_diag=NaN*ones(length(md.segmentonneumann_diag),1); %dynamic boundary conditions (water pressure) 76 54 77 disp(' creating velocities'); 78 constant=0.3; 79 md.vx_obs=constant/2*md.x.*(md.thickness).^-1; 80 md.vy_obs=constant/2*md.y.*(md.thickness).^-1; 81 82 %md.vx_obs=zeros(md.numberofgrids,1); 83 %md.vy_obs=zeros(md.numberofgrids,1); 84 md.vel_obs=(sqrt((md.vx_obs).^2+(md.vy_obs).^2)); 85 86 %Deal with boundary conditions: 87 88 disp(' boundary conditions for diagnostic model: '); 89 %Build gridonicefront, array of boundary grids belonging to the icefront: 90 gridinsideicefront=ArgusContourToMesh(md.elements,md.x,md.y,expread('Front.exp',1),'node',1); 91 gridonicefront=double(md.gridonboundary & gridinsideicefront); 92 93 md.gridondirichlet_diag=zeros(md.numberofgrids,1); 94 pos=find(md.gridonboundary & ~gridonicefront);md.gridondirichlet_diag(pos)=1; 95 md.dirichletvalues_diag=zeros(md.numberofgrids,2); 96 97 radius=sqrt((md.x).*md.x+(md.y).*md.y); 98 pos=find(radius==min(radius));md.gridondirichlet_diag(pos)=1; 99 md.x(pos)=0; md.y(pos)=0; %the closest node to the center is changed to be exactly at the center 100 101 pos=find(gridonicefront(md.segments(:,1)) | gridonicefront(md.segments(:,2))); 102 md.segmentonneumann_diag=md.segments(pos,:); 103 md.neumannvalues_diag=NaN*ones(length(md.segmentonneumann_diag),1); %dynamic boundary conditions (water pressure) 104 105 disp(' boundary conditions for prognostic model: '); 106 md.gridondirichlet_prog=zeros(md.numberofgrids,1); 107 md.dirichletvalues_prog=zeros(md.numberofgrids,1); 108 pos=find(gridonicefront(md.segments(:,1)) | gridonicefront(md.segments(:,2))); 109 md.segmentonneumann_prog=md.segments(pos,:); 110 md.neumannvalues_prog=zeros(size(md.segmentonneumann_prog,1),1); 111 md.neumannvalues_prog(:)=NaN; %free radiation 112 113 pos=find(gridonicefront(md.segments(:,1)) | gridonicefront(md.segments(:,2))); 114 md.segmentonneumann_prog2=md.segments(pos,:); 115 md.neumannvalues_prog2=zeros(size(md.segmentonneumann_prog2,1),1); 116 md.neumannvalues_prog2(:)=NaN; %free radiation 117 118 disp(' boundary conditions for thermal model: '); 119 md.melting=zeros(md.numberofgrids,1); 120 md.gridondirichlet_thermal=ones(md.numberofgrids,1); %surface temperatures 121 md.dirichletvalues_thermal=md.observed_temperature; 122 md.geothermalflux=zeros(md.numberofgrids,1); 123 pos=find(md.elementonicesheet); 124 %md.geothermalflux(md.elements(pos,:))=50*10^-3; %50 mW/m^2 125 126 % Some Cielo code, ignore. 127 if strcmp(md.cluster,'yes') 128 ServerDisconnect; 129 end 55 disp(' boundary conditions for thermal model: '); 56 md.gridondirichlet_thermal=zeros(md.numberofgrids,1);
Note:
See TracChangeset
for help on using the changeset viewer.