Hi! I am using ISSM v4.24 (from https://github.com/ISSMteam/ISSM), with Matlab. I want to force my model with monthly temperatures and precipitation fields into the future (in the shape of (num_years*12,x,y)
or (number_vertices, num_year*12)
after having it interpolated to my mesh. I want to tune the pddfac_snow and pddfac_ice so the calculated SMB matches a reference period.
I was running in a bit of a problem when trying to use the PDD scheme (src/m/classes/SMBpdd.m
) as it would only allow a timeseries of 12 months.
How do I use the PDD option correctly on a monthly timestep beyond a year? What is the correct syntax? How do I run it with monthly input? I also have yearly ocean forcing. If you give timesteps, how do they have to be given to the model?
While trying to fix my runme, I found also the following: between the older SVN code and the current Github version v4.24 there was a slight change in the SMBpdd.m code.
In the newest version the md.smb.monthlytemperatures need to be of the shape (number_vertices, 12):
if(self.isdelta18o==0 & self.ismungsm==0)
md = checkfield(md,'fieldname','smb.monthlytemperatures','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1);
md = checkfield(md,'fieldname','smb.precipitation','size',[md.mesh.numberofvertices 12],'NaN',1,'Inf',1);
but in a previous version (e.g: SVN27714M) it says
md = checkfield(md,'fieldname','smb.monthlytemperatures','timeseries',1,'NaN',1,'Inf',1);
md = checkfield(md,'fieldname','smb.precipitation','timeseries',1,'NaN',1,'Inf',1);
The .cpp seems to be equal between the versions. So it was always only allowing 12 months?
Not sure what ‘timeseries’ means, but maybe that the last row (num_vertices +1) contains the timesteps 1 2 3 4 … ?
Here is a snippet of my runme.m:
md.smb = SMBpdd();
md.smb.monthlytemperatures = tas; % 2m surface air temperatures [K]
md.smb.precipitation = pr; % monthly surface precipitation [m/yr water eq]
sdim = size(tas,1); % num of vertices
md.smb.s0t = 2 * ones(sdim, 1); % elevation from temperature source [m]
md.smb.s0p = 2 * ones(sdim, 1); % elevation from precip source [m]
md.smb.issetpddfac = 1; % is user passing in defined pdd factors md.smb.pddfac_snow = 3.3* (1000/rhoi); %Pdd factor for snow for all the domain md.smb.pddfac_ice = 8.8* (1000/rhoi); %Pdd factor for ice for all the domain md.smb.rlaps = 6.5; % present day lapse rate [degree/km]
md.smb.desfac= 0.5; % desertification elevation factor [m]
years_of_simulation = length(2016:2100);
md.timestepping.interp_forcing = 1;
md.timestepping.start_time = 21; % tas contain values from 1995-2300; if we start in 2016
md.timestepping.final_time = years_of_simulation+ 21; %months_of_simulation+(21*12); % run until x
md.timestepping.time_step = 1/12; % monthly time step?
md.settings.output_frequency = 1; % every month?
I try to find a solution online but I couldn’t. I am happy to contribute to the documentation of the PDD option on the web https://issm.jpl.nasa.gov/documentation/pdd/ or in the manual.
Also, what does ismungsm==0
stand for? I could not find it anywhere what mungsm
means or what this option does.
If there is another recommended way to calculate SMB from only tas
and pr
monthly input, I would appreciate any hints, thanks! (I have checked the GEMB model but it may need too many input variables for my current model set up).