Changeset 19554
- Timestamp:
- 09/16/15 17:15:08 (10 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 24 added
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r19528 r19554 58 58 ./classes/Inputs/IntInput.cpp\ 59 59 ./classes/Inputs/DoubleInput.cpp\ 60 ./classes/Inputs/DoubleArrayInput.cpp\ 60 61 ./classes/Inputs/DatasetInput.cpp\ 61 62 ./classes/Materials/Materials.cpp\ … … 171 172 ./modules/SpcNodesx/SpcNodesx.cpp\ 172 173 ./modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp\ 174 ./modules/SurfaceMassBalancex/Gembx.cpp\ 173 175 ./modules/Reducevectorgtofx/Reducevectorgtofx.cpp\ 174 176 ./modules/Reduceloadx/Reduceloadx.cpp\ -
issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
r19528 r19554 23 23 bool isdelta18o,ismungsm,isd18opd; 24 24 25 /*Figure out smb model: */26 iomodel->Constant(&smb_model,SmbEnum);27 28 25 /*Update elements: */ 29 26 int counter=0; … … 36 33 } 37 34 35 /*Figure out smb model: */ 36 iomodel->Constant(&smb_model,SmbEnum); 37 38 39 Input* bof=NULL; 40 Element* element=NULL; 38 41 switch(smb_model){ 39 42 case SMBforcingEnum: 40 43 iomodel->FetchDataToInput(elements,SmbMassBalanceEnum,0.); 44 break; 45 case SMBgembEnum: 46 iomodel->FetchDataToInput(elements,SmbTaEnum); 47 iomodel->FetchDataToInput(elements,SmbVEnum); 48 iomodel->FetchDataToInput(elements,SmbDswrfEnum); 49 iomodel->FetchDataToInput(elements,SmbDlwrfEnum); 50 iomodel->FetchDataToInput(elements,SmbPEnum); 51 iomodel->FetchDataToInput(elements,SmbEAirEnum); 52 iomodel->FetchDataToInput(elements,SmbPAirEnum); 53 iomodel->FetchDataToInput(elements,SmbZTopEnum); 54 iomodel->FetchDataToInput(elements,SmbDzTopEnum); 55 iomodel->FetchDataToInput(elements,SmbDzMinEnum); 56 iomodel->FetchDataToInput(elements,SmbZYEnum); 57 iomodel->FetchDataToInput(elements,SmbZMaxEnum); 58 iomodel->FetchDataToInput(elements,SmbZMinEnum); 59 iomodel->FetchDataToInput(elements,SmbTmeanEnum); 60 iomodel->FetchDataToInput(elements,SmbCEnum); 61 iomodel->FetchDataToInput(elements,SmbTzEnum); 62 iomodel->FetchDataToInput(elements,SmbVzEnum); 41 63 break; 42 64 case SMBpddEnum: … … 92 114 _error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet"); 93 115 } 116 117 94 118 95 119 }/*}}}*/ … … 111 135 case SMBforcingEnum: 112 136 /*Nothing to add to parameters*/ 137 break; 138 case SMBgembEnum: 139 parameters->AddObject(iomodel->CopyConstantObject(SmbAIdxEnum)); 140 parameters->AddObject(iomodel->CopyConstantObject(SmbSwIdxEnum)); 141 parameters->AddObject(iomodel->CopyConstantObject(SmbDenIdxEnum)); 142 parameters->AddObject(iomodel->CopyConstantObject(SmbOutputFreqEnum)); 143 parameters->AddObject(iomodel->CopyConstantObject(SmbCldFracEnum)); 144 parameters->AddObject(iomodel->CopyConstantObject(SmbT0wetEnum)); 145 parameters->AddObject(iomodel->CopyConstantObject(SmbT0dryEnum)); 146 parameters->AddObject(iomodel->CopyConstantObject(SmbKEnum)); 147 parameters->AddObject(iomodel->CopyConstantObject(SmbASnowEnum)); 148 parameters->AddObject(iomodel->CopyConstantObject(SmbAIceEnum)); 149 parameters->AddObject(iomodel->CopyConstantObject(SmbDtEnum)); 150 parameters->AddObject(iomodel->CopyConstantObject(SmbIsgraingrowthEnum)); 151 parameters->AddObject(iomodel->CopyConstantObject(SmbIsalbedoEnum)); 152 parameters->AddObject(iomodel->CopyConstantObject(SmbIsshortwaveEnum)); 153 parameters->AddObject(iomodel->CopyConstantObject(SmbIsthermalEnum)); 154 parameters->AddObject(iomodel->CopyConstantObject(SmbIsaccumulationEnum)); 155 parameters->AddObject(iomodel->CopyConstantObject(SmbIsmeltEnum)); 156 parameters->AddObject(iomodel->CopyConstantObject(SmbIsdensificationEnum)); 157 parameters->AddObject(iomodel->CopyConstantObject(SmbIsturbulentfluxEnum)); 113 158 break; 114 159 case SMBpddEnum: … … 196 241 /*Nothing to be done*/ 197 242 break; 243 case SMBgembEnum: 244 Gembx(femmodel); 245 break; 198 246 case SMBpddEnum: 199 247 bool isdelta18o,ismungsm; -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r19527 r19554 14 14 #include "../classes.h" 15 15 #include "../../shared/shared.h" 16 #include "../../modules/SurfaceMassBalancex/SurfaceMassBalancex.h" 16 17 /*}}}*/ 17 18 … … 1366 1367 } 1367 1368 else if(vector_type==2){ //element vector 1369 1370 IssmDouble value; 1371 1368 1372 /*Are we in transient or static? */ 1369 1373 if(M==iomodel->numberofelements){ … … 1379 1383 else _error_("could not recognize nature of vector from code " << code); 1380 1384 } 1381 else { 1382 _error_("transient element inputs not supported yet!"); 1383 } 1384 } 1385 else{ 1386 _error_("Cannot add input for vector type " << vector_type << " (not supported)"); 1387 } 1388 }/*}}}*/ 1385 else if(M==iomodel->numberofelements+1){ 1386 /*create transient input: */ 1387 IssmDouble* times = xNew<IssmDouble>(N); 1388 for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t]; 1389 TransientInput* transientinput=new TransientInput(vector_enum,times,N); 1390 TriaInput* bof=NULL; 1391 for(t=0;t<N;t++){ 1392 value=vector[N*this->Sid()+t]; 1393 switch(this->ObjectEnum()){ 1394 case TriaEnum: transientinput->AddTimeInput(new TriaInput( vector_enum,&value,P0Enum)); break; 1395 case PentaEnum: transientinput->AddTimeInput(new PentaInput(vector_enum,&value,P0Enum)); break; 1396 case TetraEnum: transientinput->AddTimeInput(new TetraInput(vector_enum,&value,P0Enum)); break; 1397 default: _error_("Not implemented yet"); 1398 } 1399 } 1400 this->inputs->AddInput(transientinput); 1401 xDelete<IssmDouble>(times); 1402 } 1403 else _error_("element vector is either numberofelements or numberofelements+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long"); 1404 } 1405 else _error_("Cannot add input for vector type " << vector_type << " (not supported)"); 1406 } 1407 /*}}}*/ 1389 1408 void Element::InputDuplicate(int original_enum,int new_enum){/*{{{*/ 1390 1409 … … 1866 1885 1867 1886 }/*}}}*/ 1868 void Element::ResultInterpolation(int* pinterpolation,int* pnodesperelement,int output_enum){/*{{{*/1887 void Element::ResultInterpolation(int* pinterpolation,int* pnodesperelement,int* parray_size, int output_enum){/*{{{*/ 1869 1888 1870 1889 Input* input=this->inputs->GetInput(output_enum); … … 1960 1979 *pinterpolation = input->GetResultInterpolation(); 1961 1980 *pnodesperelement = input->GetResultNumberOfNodes(); 1981 *parray_size = input->GetResultArraySize(); 1962 1982 }/*}}}*/ 1963 1983 void Element::ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum){/*{{{*/ … … 1967 1987 1968 1988 input->ResultToPatch(values,nodesperelement,this->Sid()); 1989 1990 } /*}}}*/ 1991 void Element::ResultToMatrix(IssmDouble* values,int ncols,int output_enum){/*{{{*/ 1992 1993 Input* input=this->inputs->GetInput(output_enum); 1994 if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 1995 1996 input->ResultToMatrix(values,ncols,this->Sid()); 1969 1997 1970 1998 } /*}}}*/ … … 2093 2121 } 2094 2122 /*}}}*/ 2123 void Element::SmbGemb(){/*{{{*/ 2124 2125 /*Intermediary variables: {{{*/ 2126 bool isinitialized=false; 2127 IssmDouble zTop,dzTop,zMax,zMin,zY,dzMin; 2128 IssmDouble Tmean; 2129 IssmDouble C; 2130 IssmDouble Tz,Vz; 2131 IssmDouble rho_ice, aSnow,aIce; 2132 IssmDouble time,dt; 2133 IssmDouble t,smb_dt; 2134 IssmDouble Ta,V,dlw,dsw,P,eAir,pAir; 2135 int aIdx=0; 2136 int denIdx=0; 2137 int swIdx=0; 2138 IssmDouble cldFrac,t0wet, t0dry, K; 2139 IssmDouble comp1,comp2; 2140 IssmDouble ulw; 2141 IssmDouble netSW; 2142 IssmDouble netLW; 2143 IssmDouble lhf, shf, dayEC; 2144 IssmDouble initMass; 2145 IssmDouble sumR, sumM, sumEC, sumP, sumW,sumMassAdd; 2146 IssmDouble sumMass,dMass; 2147 bool isgraingrowth,isalbedo,isshortwave,isthermal,isaccumulation,ismelt,isdensification,isturbulentflux; 2148 /*}}}*/ 2149 /*Output variables:{{{ */ 2150 IssmDouble* dz=NULL; 2151 IssmDouble* d = NULL; 2152 IssmDouble* re = NULL; 2153 IssmDouble* gdn = NULL; 2154 IssmDouble* gsp = NULL; 2155 IssmDouble EC = 0; 2156 IssmDouble* W = NULL; 2157 IssmDouble* a = NULL; 2158 IssmDouble* swf=NULL; 2159 IssmDouble* T = NULL; 2160 IssmDouble T_bottom; 2161 IssmDouble M; 2162 IssmDouble R; 2163 IssmDouble mAdd; 2164 int m; 2165 /*}}}*/ 2166 2167 /*only compute SMB at the surface: */ 2168 if (!IsOnSurface()) return; 2169 2170 /*Retrieve material properties and parameters:{{{ */ 2171 rho_ice = matpar->GetMaterialParameter(MaterialsRhoIceEnum); 2172 parameters->FindParam(&aSnow,SmbASnowEnum); 2173 parameters->FindParam(&aIce,SmbAIceEnum); 2174 parameters->FindParam(&time,TimeEnum); /*transient core time at which we run the smb core*/ 2175 parameters->FindParam(&dt,TimesteppingTimeStepEnum); /*transient core time step*/ 2176 parameters->FindParam(&smb_dt,SmbDtEnum); /*time period for the smb solution, usually smaller than the glaciological dt*/ 2177 parameters->FindParam(&aIdx,SmbAIdxEnum); 2178 parameters->FindParam(&denIdx,SmbDenIdxEnum); 2179 parameters->FindParam(&swIdx,SmbSwIdxEnum); 2180 parameters->FindParam(&cldFrac,SmbCldFracEnum); 2181 parameters->FindParam(&t0wet,SmbT0wetEnum); 2182 parameters->FindParam(&t0dry,SmbT0dryEnum); 2183 parameters->FindParam(&K,SmbKEnum); 2184 parameters->FindParam(&isgraingrowth,SmbIsgraingrowthEnum); 2185 parameters->FindParam(&isalbedo,SmbIsalbedoEnum); 2186 parameters->FindParam(&isshortwave,SmbIsshortwaveEnum); 2187 parameters->FindParam(&isthermal,SmbIsthermalEnum); 2188 parameters->FindParam(&isaccumulation,SmbIsaccumulationEnum); 2189 parameters->FindParam(&ismelt,SmbIsmeltEnum); 2190 parameters->FindParam(&isdensification,SmbIsdensificationEnum); 2191 parameters->FindParam(&isturbulentflux,SmbIsturbulentfluxEnum); 2192 /*}}}*/ 2193 /*Retrieve inputs: {{{*/ 2194 Input* zTop_input=this->GetInput(SmbZTopEnum); _assert_(zTop_input); 2195 Input* dzTop_input=this->GetInput(SmbDzTopEnum); _assert_(dzTop_input); 2196 Input* dzMin_input=this->GetInput(SmbDzMinEnum); _assert_(dzMin_input); 2197 Input* zMax_input=this->GetInput(SmbZMaxEnum); _assert_(zMax_input); 2198 Input* zMin_input=this->GetInput(SmbZMinEnum); _assert_(zMin_input); 2199 Input* zY_input=this->GetInput(SmbZYEnum); _assert_(zY_input); 2200 Input* Tmean_input=this->GetInput(SmbTmeanEnum); _assert_(Tmean_input); 2201 Input* C_input=this->GetInput(SmbCEnum); _assert_(C_input); 2202 Input* Tz_input=this->GetInput(SmbTzEnum); _assert_(Tz_input); 2203 Input* Vz_input=this->GetInput(SmbVzEnum); _assert_(Vz_input); 2204 Input* Ta_input=this->GetInput(SmbTaEnum); _assert_(Ta_input); 2205 Input* V_input=this->GetInput(SmbVEnum); _assert_(V_input); 2206 Input* Dlwr_input=this->GetInput(SmbDlwrfEnum); _assert_(Dlwr_input); 2207 Input* Dswr_input=this->GetInput(SmbDswrfEnum); _assert_(Dswr_input); 2208 Input* P_input=this->GetInput(SmbPEnum); _assert_(P_input); 2209 Input* eAir_input=this->GetInput(SmbEAirEnum); _assert_(eAir_input); 2210 Input* pAir_input=this->GetInput(SmbPAirEnum); _assert_(pAir_input); 2211 Input* isinitialized_input=this->inputs->GetInput(SmbIsInitializedEnum); 2212 2213 /*Retrieve input values:*/ 2214 Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0); 2215 2216 zTop_input->GetInputValue(&zTop,gauss); 2217 dzTop_input->GetInputValue(&dzTop,gauss); 2218 dzMin_input->GetInputValue(&dzMin,gauss); 2219 zMax_input->GetInputValue(&zMax,gauss); 2220 zMin_input->GetInputValue(&zMin,gauss); 2221 zY_input->GetInputValue(&zY,gauss); 2222 Tmean_input->GetInputValue(&Tmean,gauss); 2223 C_input->GetInputValue(&C,gauss); 2224 Tz_input->GetInputValue(&Tz,gauss); 2225 Vz_input->GetInputValue(&Vz,gauss); 2226 /*}}}*/ 2227 /*First, check that the initial structures have been setup in GEMB. If not, initialize profile variables: layer thickness dz, * density d, temperature T, etc. {{{*/ 2228 if(!isinitialized_input){ 2229 2230 /*Initialize grid:*/ 2231 GembgridInitialize(&dz, &m, zTop, dzTop, zMax, zY); 2232 //if(this->Sid()==1) for(int i=0;i<m;i++)_printf_("z[" << i << "]=" << 2233 //dz[i] << "\n"); 2234 2235 /*initialize profile variables:*/ 2236 d = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)d[i]=rho_ice; //ice density 2237 re = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)re[i]=2.5; //set grain size to old snow [mm] 2238 gdn = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)gdn[i]=0; //set grain dentricity to old snow 2239 gsp = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)gsp[i]=0; //set grain sphericity to old snow 2240 EC = 0; //surface evaporation (-) condensation (+) [kg m-2] 2241 W = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)W[i]=0; //set water content to zero [kg m-2] 2242 a = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)a[i]=aSnow; //set albedo equal to fresh snow [fraction] 2243 T = xNewZeroInit<IssmDouble>(m); for(int i=0;i<m;i++)T[i]=Tmean; //set initial grid cell temperature to the annual mean temperature [K] 2244 2245 //fixed lower temperatuer bounday condition - T is fixed 2246 T_bottom=T[m-1]; 2247 2248 /*Flag the initialization:*/ 2249 this->AddInput(new BoolInput(SmbIsInitializedEnum,true)); 2250 } 2251 else{ 2252 /*Recover inputs: */ 2253 DoubleArrayInput* dz_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbDzEnum)); 2254 DoubleArrayInput* d_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbDEnum)); 2255 DoubleArrayInput* re_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbReEnum)); 2256 DoubleArrayInput* gdn_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbGdnEnum)); 2257 DoubleArrayInput* gsp_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbGspEnum)); 2258 DoubleInput* EC_input= dynamic_cast<DoubleInput*>(this->GetInput(SmbECEnum)); 2259 DoubleArrayInput* W_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbWEnum)); 2260 DoubleArrayInput* a_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbAEnum)); 2261 DoubleArrayInput* T_input= dynamic_cast<DoubleArrayInput*>(this->GetInput(SmbTEnum)); 2262 2263 /*Recover arrays: */ 2264 dz_input->GetValues(&dz,&m); 2265 d_input->GetValues(&d,&m); 2266 re_input->GetValues(&re,&m); 2267 gdn_input->GetValues(&gdn,&m); 2268 gsp_input->GetValues(&gsp,&m); 2269 EC_input->GetInputValue(&EC); 2270 W_input->GetValues(&W,&m); 2271 a_input->GetValues(&a,&m); 2272 T_input->GetValues(&T,&m); 2273 2274 } /*}}}*/ 2275 2276 // determine initial mass [kg] 2277 initMass=0; for(int i=0;i<m;i++) initMass += dz[i]*d[i] + W[i]; 2278 2279 // initialize cumulative variables 2280 sumR = 0; sumM = 0; sumEC = 0; sumP = 0; sumMassAdd = 0; 2281 2282 /*Start loop: */ 2283 for (t=time;t<=time+dt;t=t+smb_dt){ 2284 2285 /*extract daily data:{{{*/ 2286 Ta_input->GetInputValue(&Ta,gauss,t);//screen level air temperature [K] 2287 V_input->GetInputValue(&V,gauss,t); //wind speed [m s-1] 2288 Dlwr_input->GetInputValue(&dlw,gauss,t); //downward longwave radiation flux [W m-2] 2289 Dswr_input->GetInputValue(&dsw,gauss,t); //downward shortwave radiation flux [W m-2] 2290 P_input->GetInputValue(&P,gauss,t); //precipitation [kg m-2] 2291 eAir_input->GetInputValue(&eAir,gauss,t); //screen level vapor pressure [Pa] 2292 pAir_input->GetInputValue(&pAir,gauss,t); // screen level air pressure [Pa] 2293 //_printf_("Time: " << t << " Ta: " << Ta << " V: " << V << " dlw: " << dlw << " dsw: " << dsw << " P: " << P << " eAir: " << eAir << " pAir: " << pAir << "\n"); 2294 /*}}}*/ 2295 2296 /*Snow grain metamorphism:*/ 2297 if(isgraingrowth)grainGrowth(re, gdn, gsp, T, dz, d, W, smb_dt, m, aIdx); 2298 2299 /*Snow, firn and ice albedo:*/ 2300 if(isalbedo)albedo(a,aIdx,re,d,cldFrac,aIce, aSnow,T,W,P,EC,t0wet,t0dry,K,smb_dt,m); 2301 2302 /*Distribution of absorbed short wave radation with depth:*/ 2303 if(isshortwave)shortwave(&swf, swIdx, aIdx, dsw, a[0], d, dz, re,m); 2304 2305 /*Thermal profile computation:*/ 2306 if(isthermal)thermo(&EC, T, dz, d, swf, dlw, Ta, V, eAir, pAir, W[0], smb_dt, Vz, Tz,m); 2307 2308 /*Change in thickness of top cell due to evaporation/condensation assuming same density as top cell. 2309 * need to fix this in case all or more of cell evaporates */ 2310 dz[0] = dz[0] + EC / d[0]; 2311 2312 /*Add snow/rain to top grid cell adjusting cell depth, temperature and density*/ 2313 if(isaccumulation)accumulation(&T, &dz, &d, &W, &a, &re, &gdn, &gsp, &m, Ta, P, dzMin, aSnow); 2314 2315 /*Calculate water production, M [kg m-2] resulting from snow/ice temperature exceeding 273.15 deg K 2316 * (> 0 deg C), runoff R [kg m-2] and resulting changes in density and determine wet compaction [m]*/ 2317 comp2 = cellsum(dz,m); 2318 if(ismelt)melt(&M, &R, &mAdd, &T, &d, &dz, &W, &a, &re, &gdn, &gsp, &m, dzMin, zMax, zMin); 2319 comp2 = (comp2 - cellsum(dz,m)); 2320 2321 /*Allow non-melt densification and determine compaction [m]*/ 2322 comp1 = cellsum(dz,m); 2323 if(isdensification)densification(d,dz, T, re, denIdx, C, smb_dt, Tmean,m); 2324 comp1 = (comp1 - cellsum(dz,m)); 2325 2326 /*Calculate upward longwave radiation flux [W m-2] not used in energy balance. Calculated for every 2327 * sub-time step in thermo equations*/ 2328 ulw = 5.67E-8 * pow(T[0],4.0); 2329 2330 /*Calculate net shortwave and longwave [W m-2]*/ 2331 netSW = cellsum(swf,m); 2332 netLW = dlw - ulw; 2333 2334 /*Calculate turbulent heat fluxes [W m-2]*/ 2335 if(isturbulentflux)turbulentFlux(&shf, &lhf, &dayEC, Ta, T[0], V, eAir, pAir, d[0], W[0], Vz, Tz); 2336 2337 /*Sum component mass changes [kg m-2]*/ 2338 sumMassAdd = mAdd + sumMassAdd; 2339 sumM = M + sumM; 2340 sumR = R + sumR; 2341 sumW = cellsum(W,m); 2342 sumP = P + sumP; 2343 sumEC = sumEC + EC; // evap (-)/cond(+) 2344 2345 /*Calculate total system mass:*/ 2346 sumMass=0; for(int i=0;i<m;i++) sumMass += dz[i]*d[i]; 2347 dMass = sumMass + sumR + sumW - sumP - sumEC - initMass - sumMassAdd; 2348 dMass = round(dMass * 100.0)/100.0; 2349 2350 /*Check mass conservation:*/ 2351 if (dMass != 0.0) _error_("total system mass not conserved in MB function"); 2352 2353 /*Check bottom grid cell T is unchanged:*/ 2354 if (T[m-1]!=T_bottom) _printf_("T(end)~=T_bottom"); 2355 } 2356 2357 /*Save generated inputs: */ 2358 this->AddInput(new DoubleArrayInput(SmbDzEnum,dz,m)); 2359 this->AddInput(new DoubleArrayInput(SmbDEnum,d,m)); 2360 this->AddInput(new DoubleArrayInput(SmbReEnum,re,m)); 2361 this->AddInput(new DoubleArrayInput(SmbGdnEnum,gdn,m)); 2362 this->AddInput(new DoubleArrayInput(SmbGspEnum,gsp,m)); 2363 this->AddInput(new DoubleInput(SmbECEnum,EC)); 2364 this->AddInput(new DoubleArrayInput(SmbWEnum,W,m)); 2365 this->AddInput(new DoubleArrayInput(SmbAEnum,a,m)); 2366 this->AddInput(new DoubleArrayInput(SmbTEnum,T,m)); 2367 2368 /*Free allocations:{{{*/ 2369 xDelete<IssmDouble>(dz); 2370 xDelete<IssmDouble>(d); 2371 xDelete<IssmDouble>(re); 2372 xDelete<IssmDouble>(gdn); 2373 xDelete<IssmDouble>(gsp); 2374 xDelete<IssmDouble>(W); 2375 xDelete<IssmDouble>(a); 2376 xDelete<IssmDouble>(T); 2377 /*}}}*/ 2378 } 2379 /*}}}*/ 2095 2380 void Element::StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/ 2096 2381 /*Compute the 3d Strain Rate (6 components): -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r19518 r19554 130 130 IssmDouble PureIceEnthalpy(IssmDouble pressure); 131 131 void ResetIceLevelset(void); 132 void ResultInterpolation(int* pinterpolation,int*nodesperelement,int output_enum);132 void ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum); 133 133 void ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum); 134 void ResultToMatrix(IssmDouble* values,int ncols,int output_enum); 134 135 void ResultToVector(Vector<IssmDouble>* vector,int output_enum); 135 136 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 136 137 int Sid(); 138 void SmbGemb(); 137 139 void StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input); 138 140 void StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r19528 r19554 1040 1040 1041 1041 /*Vector layout*/ 1042 int interpolation,nodesperelement,size; 1043 int rank_interpolation=-1,rank_nodesperelement=-1; 1042 int interpolation,nodesperelement,size,nlines,ncols,array_size; 1043 int rank_interpolation=-1,rank_nodesperelement=-1,rank_arraysize=-1,max_rank_arraysize=0; 1044 bool isarray=false; 1044 1045 1045 1046 /*Get interpolation (and compute input if necessary)*/ 1046 1047 for(int j=0;j<elements->Size();j++){ 1047 1048 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(j)); 1048 element->ResultInterpolation(&rank_interpolation,&rank_nodesperelement,output_enum); 1049 element->ResultInterpolation(&rank_interpolation,&rank_nodesperelement,&rank_arraysize,output_enum); 1050 if (rank_arraysize>max_rank_arraysize)max_rank_arraysize=rank_arraysize; 1049 1051 } 1052 rank_arraysize=max_rank_arraysize; 1050 1053 1051 1054 /*Broadcast for cpus that do not have any elements*/ 1052 1055 ISSM_MPI_Reduce(&rank_interpolation,&interpolation,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm()); 1053 1056 ISSM_MPI_Reduce(&rank_nodesperelement,&nodesperelement,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm()); 1057 ISSM_MPI_Reduce(&rank_arraysize,&array_size,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm()); 1054 1058 ISSM_MPI_Bcast(&interpolation,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 1055 1059 ISSM_MPI_Bcast(&nodesperelement,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 1056 1060 ISSM_MPI_Bcast(&array_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 1061 1057 1062 if(results_on_nodes){ 1058 1063 … … 1080 1085 /*Allocate vector depending on interpolation*/ 1081 1086 switch(interpolation){ 1082 case P0Enum: size = this->elements->NumberOfElements(); break; 1083 case P1Enum: size = this->vertices->NumberOfVertices(); break; 1087 case P0Enum: isarray = false; size = this->elements->NumberOfElements(); break; 1088 case P1Enum: isarray = false; size = this->vertices->NumberOfVertices(); break; 1089 case P0ArrayEnum: isarray = true; nlines = this->elements->NumberOfElements(); ncols= array_size; break; 1084 1090 default: _error_("Interpolation "<<EnumToStringx(interpolation)<<" not supported yet"); 1085 1091 1086 1092 } 1087 Vector<IssmDouble> *vector_result = new Vector<IssmDouble>(size); 1088 1089 /*Fill in vector*/ 1090 for(int j=0;j<elements->Size();j++){ 1091 Element* element=(Element*)elements->GetObjectByOffset(j); 1092 element->ResultToVector(vector_result,output_enum); 1093 if (!isarray){ 1094 Vector<IssmDouble> *vector_result = new Vector<IssmDouble>(size); 1095 1096 /*Fill in vector*/ 1097 for(int j=0;j<elements->Size();j++){ 1098 Element* element=(Element*)elements->GetObjectByOffset(j); 1099 element->ResultToVector(vector_result,output_enum); 1100 } 1101 vector_result->Assemble(); 1102 1103 if(save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time)); 1093 1104 } 1094 vector_result->Assemble(); 1095 1096 if(save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time)); 1105 else{ 1106 IssmDouble* values = xNewZeroInit<IssmDouble>(nlines*ncols); 1107 IssmDouble* allvalues = xNew<IssmDouble>(nlines*ncols); 1108 1109 /*Fill-in matrix*/ 1110 for(int j=0;j<elements->Size();j++){ 1111 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(j)); 1112 element->ResultToMatrix(values,ncols, output_enum); 1113 } 1114 /*Gather from all cpus*/ 1115 ISSM_MPI_Allreduce((void*)values,(void*)allvalues,ncols*nlines,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm()); 1116 xDelete<IssmDouble>(values); 1117 1118 if(save_results)results->AddResult(new GenericExternalResult<IssmDouble*>(results->Size()+1,output_enum,allvalues,nlines,ncols,step,time)); 1119 xDelete<IssmDouble>(allvalues); 1120 } 1097 1121 } 1098 1122 isvec = true; -
issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
r19254 r19554 38 38 int GetResultInterpolation(void){return P0Enum;}; 39 39 int GetResultNumberOfNodes(void){return 1;}; 40 int GetResultArraySize(void){return 1;}; 40 41 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 41 42 void Configure(Parameters* parameters); -
issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
r19254 r19554 79 79 int GetResultInterpolation(void); 80 80 int GetResultNumberOfNodes(void); 81 int GetResultArraySize(void){return 1;}; 81 82 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 82 83 void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist); -
issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
r19254 r19554 74 74 int GetResultInterpolation(void){_error_("not implemented yet");}; 75 75 int GetResultNumberOfNodes(void){_error_("not implemented yet");}; 76 int GetResultArraySize(void){_error_("not implemented yet");}; 76 77 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 77 78 void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
r19254 r19554 41 41 int GetResultInterpolation(void){return P0Enum;}; 42 42 int GetResultNumberOfNodes(void){return 1;}; 43 int GetResultArraySize(void){return 1;}; 43 44 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 44 45 void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/Input.h
r18450 r19554 61 61 virtual int GetResultInterpolation(void)=0; 62 62 virtual int GetResultNumberOfNodes(void)=0; 63 virtual void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 63 virtual int GetResultArraySize(void)=0; 64 virtual void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 65 virtual void ResultToMatrix(IssmDouble* values,int ncols,int sid){_error_("not supported yet");}; 64 66 }; 65 67 #endif -
issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
r19254 r19554 42 42 int GetResultInterpolation(void){return P0Enum;}; 43 43 int GetResultNumberOfNodes(void){return 1;}; 44 int GetResultArraySize(void){return 1;}; 44 45 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 45 46 void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
r19254 r19554 43 43 int GetResultInterpolation(void); 44 44 int GetResultNumberOfNodes(void); 45 int GetResultArraySize(void){return 1;}; 45 46 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid); 46 47 void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
r19254 r19554 43 43 int GetResultInterpolation(void){_error_("not implemented");}; 44 44 int GetResultNumberOfNodes(void){_error_("not implemented");}; 45 int GetResultArraySize(void){_error_("not implemented");}; 45 46 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 46 47 void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/TetraInput.h
r19254 r19554 43 43 int GetResultInterpolation(void); 44 44 int GetResultNumberOfNodes(void); 45 int GetResultArraySize(void){return 1;}; 45 46 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid); 46 47 void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");}; -
issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
r19254 r19554 357 357 } 358 358 /*}}}*/ 359 int TransientInput::GetResultArraySize(void){/*{{{*/ 360 361 return 1; 362 } 363 /*}}}*/ 359 364 void TransientInput::Extrude(int start){/*{{{*/ 360 365 -
issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
r19254 r19554 48 48 int GetResultInterpolation(void); 49 49 int GetResultNumberOfNodes(void); 50 int GetResultArraySize(void); 50 51 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");}; 51 52 void Configure(Parameters* parameters); -
issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
r19254 r19554 141 141 } 142 142 /*}}}*/ 143 int TriaInput::GetResultArraySize(void){/*{{{*/ 144 145 return 1; 146 147 } 148 /*}}}*/ 143 149 void TriaInput::ResultToPatch(IssmDouble* values,int nodesperelement,int sid){/*{{{*/ 144 150 -
issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
r19254 r19554 43 43 int GetResultInterpolation(void); 44 44 int GetResultNumberOfNodes(void); 45 int GetResultArraySize(void); 45 46 void ResultToPatch(IssmDouble* values,int nodesperelement,int sid); 46 47 void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");}; -
issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
r19527 r19554 39 39 dpermil=0; 40 40 41 albedo_snow=0; 42 albedo_ice=0; 43 41 44 sediment_compressibility=0; 42 45 sediment_porosity=0; … … 95 98 case SMBforcingEnum: 96 99 /*Nothing to add*/ 100 break; 101 case SMBgembEnum: 102 iomodel->Constant(&this->albedo_ice,SmbAIceEnum); 103 iomodel->Constant(&this->albedo_snow,SmbASnowEnum); 97 104 break; 98 105 case SMBpddEnum: -
issm/trunk-jpl/src/c/classes/Materials/Matpar.h
r19309 r19554 35 35 IssmDouble rlapslgm; 36 36 IssmDouble dpermil; 37 38 /*albedo: */ 39 IssmDouble albedo_ice; 40 IssmDouble albedo_snow; 37 41 38 42 /*hydrology Dual Porous Continuum: */ -
issm/trunk-jpl/src/c/classes/classes.h
r19087 r19554 62 62 #include "./Inputs/BoolInput.h" 63 63 #include "./Inputs/DoubleInput.h" 64 #include "./Inputs/DoubleArrayInput.h" 64 65 #include "./Inputs/IntInput.h" 65 66 #include "./Inputs/TetraInput.h" -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
r19172 r19554 17 17 void SmbHenningx(FemModel* femmodel); 18 18 void SmbComponentsx(FemModel* femmodel); 19 void SmbMeltComponentsx(FemModel* femmodel); 19 void SmbMeltComponentsx(FemModel* femmodel); 20 20 21 /*GEMB: */ 22 void Gembx(FemModel* femmodel); 23 void GembgridInitialize(IssmDouble** pdz, int* psize, IssmDouble zTop, IssmDouble dzTop, IssmDouble zMax, IssmDouble zY); 24 IssmDouble Marbouty(IssmDouble T, IssmDouble d, IssmDouble dT); 25 void grainGrowth(IssmDouble* pre, IssmDouble* pgdn, IssmDouble* pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx); 26 void albedo(IssmDouble* a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt,int m); 27 void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, int m); 28 void thermo(IssmDouble* pEC, IssmDouble* T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz); 29 void accumulation(IssmDouble** pT, IssmDouble** pdz, IssmDouble** pd, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pm, IssmDouble Ta, IssmDouble P, IssmDouble dzMin, IssmDouble aSnow); 30 void melt(IssmDouble* pM, IssmDouble* pR, IssmDouble* pmAdd, IssmDouble** pT, IssmDouble** pd, IssmDouble** pdz, IssmDouble** pW, IssmDouble** pa, IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, int* pn, IssmDouble dzMin, IssmDouble zMax, IssmDouble zMin); 31 void densification(IssmDouble* d,IssmDouble* dz, IssmDouble* T, IssmDouble* re, int denIdx, IssmDouble C, IssmDouble dt, IssmDouble Tmean,int m); 32 void turbulentFlux(IssmDouble* pshf, IssmDouble* plhf, IssmDouble* pEC, IssmDouble Ta, IssmDouble Ts, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble ds, IssmDouble Ws, IssmDouble Vz, IssmDouble Tz); 21 33 #endif /* _SurfaceMassBalancex_H*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r19528 r19554 354 354 SmbNumRequestedOutputsEnum, 355 355 SmbRequestedOutputsEnum, 356 SmbIsInitializedEnum, 356 357 /*SMBforcing*/ 357 358 SMBforcingEnum, … … 369 370 SmbCEnum, 370 371 SmbTzEnum, 371 SmbVzEnum, 372 SmbSpinUpEnum, 372 SmbVzEnum, 373 SmbDtEnum, 374 SmbDzEnum, 373 375 SmbAIdxEnum, 374 376 SmbSwIdxEnum, … … 387 389 SmbT0dryEnum, 388 390 SmbKEnum, 391 SmbDEnum, 392 SmbReEnum, 393 SmbGdnEnum, 394 SmbGspEnum, 395 SmbECEnum, 396 SmbWEnum, 397 SmbAEnum, 398 SmbTEnum, 399 SmbIsgraingrowthEnum, 400 SmbIsalbedoEnum, 401 SmbIsshortwaveEnum, 402 SmbIsthermalEnum, 403 SmbIsaccumulationEnum, 404 SmbIsmeltEnum, 405 SmbIsdensificationEnum, 406 SmbIsturbulentfluxEnum, 389 407 /*SMBpdd*/ 390 408 SMBpddEnum, … … 520 538 DatasetInputEnum, 521 539 DoubleInputEnum, 540 DoubleArrayInputEnum, 522 541 DataSetParamEnum, 523 542 DoubleMatArrayParamEnum, … … 696 715 /*Element Interpolations{{{*/ 697 716 P0Enum, 717 P0ArrayEnum, 698 718 P1Enum, 699 719 P1DGEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r19528 r19554 358 358 case SmbNumRequestedOutputsEnum : return "SmbNumRequestedOutputs"; 359 359 case SmbRequestedOutputsEnum : return "SmbRequestedOutputs"; 360 case SmbIsInitializedEnum : return "SmbIsInitialized"; 360 361 case SMBforcingEnum : return "SMBforcing"; 361 362 case SmbMassBalanceEnum : return "SmbMassBalance"; … … 372 373 case SmbTzEnum : return "SmbTz"; 373 374 case SmbVzEnum : return "SmbVz"; 374 case SmbSpinUpEnum : return "SmbSpinUp"; 375 case SmbDtEnum : return "SmbDt"; 376 case SmbDzEnum : return "SmbDz"; 375 377 case SmbAIdxEnum : return "SmbAIdx"; 376 378 case SmbSwIdxEnum : return "SmbSwIdx"; … … 389 391 case SmbT0dryEnum : return "SmbT0dry"; 390 392 case SmbKEnum : return "SmbK"; 393 case SmbDEnum : return "SmbD"; 394 case SmbReEnum : return "SmbRe"; 395 case SmbGdnEnum : return "SmbGdn"; 396 case SmbGspEnum : return "SmbGsp"; 397 case SmbECEnum : return "SmbEC"; 398 case SmbWEnum : return "SmbW"; 399 case SmbAEnum : return "SmbA"; 400 case SmbTEnum : return "SmbT"; 401 case SmbIsgraingrowthEnum : return "SmbIsgraingrowth"; 402 case SmbIsalbedoEnum : return "SmbIsalbedo"; 403 case SmbIsshortwaveEnum : return "SmbIsshortwave"; 404 case SmbIsthermalEnum : return "SmbIsthermal"; 405 case SmbIsaccumulationEnum : return "SmbIsaccumulation"; 406 case SmbIsmeltEnum : return "SmbIsmelt"; 407 case SmbIsdensificationEnum : return "SmbIsdensification"; 408 case SmbIsturbulentfluxEnum : return "SmbIsturbulentflux"; 391 409 case SMBpddEnum : return "SMBpdd"; 392 410 case SmbDelta18oEnum : return "SmbDelta18o"; … … 512 530 case DatasetInputEnum : return "DatasetInput"; 513 531 case DoubleInputEnum : return "DoubleInput"; 532 case DoubleArrayInputEnum : return "DoubleArrayInput"; 514 533 case DataSetParamEnum : return "DataSetParam"; 515 534 case DoubleMatArrayParamEnum : return "DoubleMatArrayParam"; … … 680 699 case GiaWEnum : return "GiaW"; 681 700 case P0Enum : return "P0"; 701 case P0ArrayEnum : return "P0Array"; 682 702 case P1Enum : return "P1"; 683 703 case P1DGEnum : return "P1DG"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r19528 r19554 364 364 else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum; 365 365 else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum; 366 else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum; 366 367 else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum; 367 368 else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum; … … 378 379 else if (strcmp(name,"SmbTz")==0) return SmbTzEnum; 379 380 else if (strcmp(name,"SmbVz")==0) return SmbVzEnum; 380 else if (strcmp(name,"SmbSpinUp")==0) return SmbSpinUpEnum; 381 else if (strcmp(name,"SmbDt")==0) return SmbDtEnum; 382 else if (strcmp(name,"SmbDz")==0) return SmbDzEnum; 381 383 else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum; 382 384 else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum; 383 else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;384 else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum; 388 if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum; 389 else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum; 390 else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum; 389 391 else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum; 390 392 else if (strcmp(name,"SmbZY")==0) return SmbZYEnum; … … 398 400 else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum; 399 401 else if (strcmp(name,"SmbK")==0) return SmbKEnum; 402 else if (strcmp(name,"SmbD")==0) return SmbDEnum; 403 else if (strcmp(name,"SmbRe")==0) return SmbReEnum; 404 else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum; 405 else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum; 406 else if (strcmp(name,"SmbEC")==0) return SmbECEnum; 407 else if (strcmp(name,"SmbW")==0) return SmbWEnum; 408 else if (strcmp(name,"SmbA")==0) return SmbAEnum; 409 else if (strcmp(name,"SmbT")==0) return SmbTEnum; 410 else if (strcmp(name,"SmbIsgraingrowth")==0) return SmbIsgraingrowthEnum; 411 else if (strcmp(name,"SmbIsalbedo")==0) return SmbIsalbedoEnum; 412 else if (strcmp(name,"SmbIsshortwave")==0) return SmbIsshortwaveEnum; 413 else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum; 414 else if (strcmp(name,"SmbIsaccumulation")==0) return SmbIsaccumulationEnum; 415 else if (strcmp(name,"SmbIsmelt")==0) return SmbIsmeltEnum; 416 else if (strcmp(name,"SmbIsdensification")==0) return SmbIsdensificationEnum; 417 else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum; 400 418 else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum; 401 419 else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum; … … 488 506 else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum; 489 507 else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum; 490 else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 491 512 else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum; 492 513 else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum; … … 506 527 else if (strcmp(name,"DataSet")==0) return DataSetEnum; 507 528 else if (strcmp(name,"Constraints")==0) return ConstraintsEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"Loads")==0) return LoadsEnum; 529 else if (strcmp(name,"Loads")==0) return LoadsEnum; 512 530 else if (strcmp(name,"Materials")==0) return MaterialsEnum; 513 531 else if (strcmp(name,"Nodes")==0) return NodesEnum; … … 524 542 else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum; 525 543 else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum; 544 else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum; 526 545 else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum; 527 546 else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum; … … 610 629 else if (strcmp(name,"MassFlux")==0) return MassFluxEnum; 611 630 else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum; 612 else if (strcmp(name,"Misfit")==0) return MisfitEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Misfit")==0) return MisfitEnum; 613 635 else if (strcmp(name,"Pressure")==0) return PressureEnum; 614 636 else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum; … … 629 651 else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum; 630 652 else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Vel")==0) return VelEnum; 653 else if (strcmp(name,"Vel")==0) return VelEnum; 635 654 else if (strcmp(name,"Velocity")==0) return VelocityEnum; 636 655 else if (strcmp(name,"VxAverage")==0) return VxAverageEnum; … … 695 714 else if (strcmp(name,"GiaW")==0) return GiaWEnum; 696 715 else if (strcmp(name,"P0")==0) return P0Enum; 716 else if (strcmp(name,"P0Array")==0) return P0ArrayEnum; 697 717 else if (strcmp(name,"P1")==0) return P1Enum; 698 718 else if (strcmp(name,"P1DG")==0) return P1DGEnum; … … 732 752 else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum; 733 753 else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum; 734 else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 735 758 else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum; 736 759 else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum; … … 752 775 else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 753 776 else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum; 777 else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum; 758 778 else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum; 759 779 else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum; … … 855 875 else if (strcmp(name,"MaxVx")==0) return MaxVxEnum; 856 876 else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum; 857 else if (strcmp(name,"MinVy")==0) return MinVyEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"MinVy")==0) return MinVyEnum; 858 881 else if (strcmp(name,"MaxVy")==0) return MaxVyEnum; 859 882 else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum; … … 875 898 else if (strcmp(name,"None")==0) return NoneEnum; 876 899 else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum; 900 else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum; 881 901 else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum; 882 902 else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum; -
issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp
r19030 r19554 557 557 for(int i=0;i<4;i++) X[i]=Ainv[i][0]*B[0] + Ainv[i][1]*B[1] + Ainv[i][2]*B[2] + Ainv[i][3]*B[3]; 558 558 }/*}}}*/ 559 560 void newcell(IssmDouble** pcell, IssmDouble newvalue, bool top, int m){ /*{{{*/ 561 562 IssmDouble* cell=NULL; 563 IssmDouble* dummy=NULL; 564 565 /*recover pointer: */ 566 cell=*pcell; 567 568 /*reallocate:*/ 569 dummy=xNew<IssmDouble>(m+1); 570 571 /*copy data:*/ 572 for(int i=0;i<m;i++)dummy[i+1]=cell[i]; 573 574 /*top or bottom layer:*/ 575 if(top) dummy[0]=newvalue; 576 else dummy[m]=newvalue; 577 578 /*delete and reassign: */ 579 xDelete<IssmDouble>(cell); cell=dummy; 580 581 /*assign output pointer:*/ 582 *pcell=cell; 583 } /*}}}*/ 584 IssmDouble cellsum(IssmDouble* cell, int m){ /*{{{*/ 585 586 IssmDouble sum=0; 587 588 for(int i=0;i<m;i++)sum+=cell[i]; 589 590 return sum; 591 } /*}}}*/ 592 void celldelete(IssmDouble** pcell, int m, int* indices, int nind){ /*{{{*/ 593 594 /*input: */ 595 IssmDouble* cell=*pcell; 596 597 /*output: */ 598 IssmDouble* newcell=xNew<IssmDouble>(nind); 599 600 for(int i=0;i<nind;i++){ 601 newcell[i]=cell[indices[i]]; 602 } 603 604 /*free allocation:*/ 605 xDelete<IssmDouble>(cell); 606 607 /*assign output pointers: */ 608 *pcell=newcell; 609 } /*}}}*/ 610 void cellsplit(IssmDouble** pcell, int m, int i,IssmDouble scale) { /*{{{*/ 611 612 /*input: */ 613 IssmDouble* cell=*pcell; 614 615 /*output: */ 616 IssmDouble* newcell=xNew<IssmDouble>(m+1); 617 618 for(int j=0;j<i;j++)newcell[j]=cell[j]; 619 newcell[i]=scale*cell[i]; 620 newcell[i+1]=scale* cell[i]/2; 621 for(int j=i+2;j<m+1;j++)newcell[j]=cell[j-1]; 622 623 /*free allocation:*/ 624 xDelete<IssmDouble>(cell); 625 626 /*assign output pointers: */ 627 *pcell=newcell; 628 } /*}}}*/ -
issm/trunk-jpl/src/c/shared/Matrix/matrix.h
r19030 r19554 25 25 void Matrix4x4Determinant(IssmDouble* Adet,IssmDouble* A); 26 26 void Matrix4x4Solve(IssmDouble* X,IssmDouble* A,IssmDouble* B); 27 27 28 void newcell(IssmDouble** pcell, IssmDouble newvalue, bool top, int m); 29 IssmDouble cellsum(IssmDouble* cell, int m); 30 void celldelete(IssmDouble** pcell, int m, int* indices, int nind); 31 void cellsplit(IssmDouble** pcell, int m, int i,IssmDouble scale) ; 28 32 #endif //ifndef _MATRIXUTILS_H_ -
issm/trunk-jpl/src/m/classes/SMBgemb.m
r19528 r19554 12 12 %from an automatic weather stations (AWS). Each property is therefore a matrix, of size (numberofvertices x number 13 13 %of time steps. ) 14 15 %solution choices 16 isgraingrowth; 17 isalbedo; 18 isshortwave; 19 isthermal; 20 isaccumulation; 21 ismelt; 22 isdensification; 23 isturbulentflux; 14 24 15 25 %inputs: … … 28 38 29 39 %settings: 30 spinUp = NaN; %number of cycles of met data run before output is calculated (default is 0)31 40 aIdx = NaN; %method for calculating albedo and subsurface absorption (default is 1) 32 41 % 1: effective grain radius [Gardner & Sharp, 2009] … … 97 106 function self = setdefaultparameters(self,mesh,geometry) % {{{ 98 107 99 100 self.spinUp=0; 108 self.isgraingrowth=1; 109 self.isalbedo=1; 110 self.isshortwave=1; 111 self.isthermal=1; 112 self.isaccumulation=1; 113 self.ismelt=1; 114 self.isdensification=1; 115 self.isturbulentflux=1; 116 101 117 self.aIdx = 1; 102 118 self.swIdx = 1; … … 123 139 function md = checkconsistency(self,md,solution,analyses) % {{{ 124 140 141 142 md = checkfield(md,'fieldname','smb.isgraingrowth','values',[0 1]); 143 md = checkfield(md,'fieldname','smb.isalbedo','values',[0 1]); 144 md = checkfield(md,'fieldname','smb.isshortwave','values',[0 1]); 145 md = checkfield(md,'fieldname','smb.isthermal','values',[0 1]); 146 md = checkfield(md,'fieldname','smb.isaccumulation','values',[0 1]); 147 md = checkfield(md,'fieldname','smb.ismelt','values',[0 1]); 148 md = checkfield(md,'fieldname','smb.isdensification','values',[0 1]); 149 md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0 1]); 150 125 151 md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'>',273-60,'<',273+60); %60 celsius max value 126 152 md = checkfield(md,'fieldname','smb.V','timeseries',1,'NaN',1,'>=',0,'<',45); %max 500 km/h … … 130 156 md = checkfield(md,'fieldname','smb.eAir','timeseries',1,'NaN',1); 131 157 132 md = checkfield(md,'fieldname','smb.Tmean','NaN',1,'>',273-60,'<',273+60); %60 celsius max value 133 md = checkfield(md,'fieldname','smb.C','NaN',1,'>=',0); 134 md = checkfield(md,'fieldname','smb.Tz','NaN',1,'>=',0,'<=',5000); 135 md = checkfield(md,'fieldname','smb.Vz','NaN',1,'>=',0,'<=',5000); 136 137 md = checkfield(md,'fieldname','smb.spinUp','NaN',1,'>=',0); 158 md = checkfield(md,'fieldname','smb.Tmean','size',[md.mesh.numberofelements 1],'NaN',1,'>',273-60,'<',273+60); %60 celsius max value 159 md = checkfield(md,'fieldname','smb.C','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 160 md = checkfield(md,'fieldname','smb.Tz','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0,'<=',5000); 161 md = checkfield(md,'fieldname','smb.Vz','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0,'<=',5000); 162 138 163 md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'values',[1,2,3,4]); 139 164 md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'values',[0,1]); … … 170 195 disp(sprintf(' surface forcings for SMB GEMB model :')); 171 196 197 fielddisplay(self,'isgraingrowth','run grain growth module (default true)'); 198 fielddisplay(self,'isalbedo','run albedo module (default true)'); 199 fielddisplay(self,'isshortwave','run short wave module (default true)'); 200 fielddisplay(self,'isthermal','run thermal module (default true)'); 201 fielddisplay(self,'isaccumulation','run accumulation module (default true)'); 202 fielddisplay(self,'ismelt','run melting module (default true)'); 203 fielddisplay(self,'isdensification','run densification module (default true)'); 204 fielddisplay(self,'isturbulentflux','run turbulant heat fluxes module (default true)'); 172 205 fielddisplay(self,'Ta','2 m air temperature, in Kelvin'); 173 206 fielddisplay(self,'V','wind speed (m/s-1)'); … … 188 221 fielddisplay(self,'zY','strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]'); 189 222 fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)'); 190 fielddisplay(self,'spinUp','number of cycles of met data run before output is calcualted (default is 0)');191 223 fielddisplay(self,'aIdx',{'method for calculating albedo and subsurface absorption (default is 1)',... 192 224 '1: effective grain radius [Gardner & Sharp, 2009]',... … … 198 230 case {1 2} 199 231 fielddisplay(self,'aSnow','new snow albedo (0.64 - 0.89)'); 200 fielddisplay(self,'aIce',' range 0.27-0.58 for old snow');232 fielddisplay(self,'aIce','albedo of ice (0.27-0.58)'); 201 233 case 3 202 234 fielddisplay(self,'cldFrac','average cloud amount'); … … 224 256 WriteData(fid,'enum',SmbEnum(),'data',SMBgembEnum(),'format','Integer'); 225 257 226 WriteData(fid,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 227 WriteData(fid,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 228 WriteData(fid,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 229 WriteData(fid,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 230 WriteData(fid,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 231 WriteData(fid,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 232 WriteData(fid,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',1,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 233 234 WriteData(fid,'object',self,'class','smb','fieldname','Tmean','format','Double','scale',1); 235 WriteData(fid,'object',self,'class','smb','fieldname','C','format','Double','scale',1); 236 WriteData(fid,'object',self,'class','smb','fieldname','Tz','format','Double','scale',1); 237 WriteData(fid,'object',self,'class','smb','fieldname','Vz','format','Double','scale',1); 238 WriteData(fid,'object',self,'class','smb','fieldname','spinUp','format','Integer','scale',1); 258 WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean'); 259 WriteData(fid,'object',self,'class','smb','fieldname','isalbedo','format','Boolean'); 260 WriteData(fid,'object',self,'class','smb','fieldname','isshortwave','format','Boolean'); 261 WriteData(fid,'object',self,'class','smb','fieldname','isthermal','format','Boolean'); 262 WriteData(fid,'object',self,'class','smb','fieldname','isaccumulation','format','Boolean'); 263 WriteData(fid,'object',self,'class','smb','fieldname','ismelt','format','Boolean'); 264 WriteData(fid,'object',self,'class','smb','fieldname','isdensification','format','Boolean'); 265 WriteData(fid,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean'); 266 WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean'); 267 WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean'); 268 269 WriteData(fid,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 270 WriteData(fid,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 271 WriteData(fid,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 272 WriteData(fid,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 273 WriteData(fid,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 274 WriteData(fid,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 275 WriteData(fid,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',2,'scale',1,'timeserieslength',md.mesh.numberofelements+1); 276 277 WriteData(fid,'object',self,'class','smb','fieldname','Tmean','format','DoubleMat','mattype',2,'scale',1); 278 WriteData(fid,'object',self,'class','smb','fieldname','C','format','DoubleMat','mattype',2,'scale',1); 279 WriteData(fid,'object',self,'class','smb','fieldname','Tz','format','DoubleMat','mattype',2,'scale',1); 280 WriteData(fid,'object',self,'class','smb','fieldname','Vz','format','DoubleMat','mattype',2,'scale',1); 281 WriteData(fid,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',2,'scale',1); 282 WriteData(fid,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',2,'scale',1); 283 WriteData(fid,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',2,'scale',1); 284 WriteData(fid,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',2,'scale',1); 285 WriteData(fid,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',2,'scale',1); 286 WriteData(fid,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',2,'scale',1); 287 239 288 WriteData(fid,'object',self,'class','smb','fieldname','aIdx','format','Integer','scale',1); 240 289 WriteData(fid,'object',self,'class','smb','fieldname','swIdx','format','Integer','scale',1); 241 290 WriteData(fid,'object',self,'class','smb','fieldname','denIdx','format','Integer','scale',1); 242 291 243 WriteData(fid,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',1,'scale',1);244 WriteData(fid,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',1,'scale',1);245 WriteData(fid,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',1,'scale',1);246 WriteData(fid,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',1,'scale',1);247 WriteData(fid,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',1,'scale',1);248 WriteData(fid,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',1,'scale',1);249 292 250 293 WriteData(fid,'object',self,'class','smb','fieldname','outputFreq','format','Double','scale',1); … … 255 298 WriteData(fid,'object',self,'class','smb','fieldname','t0dry','format','Double','scale',1); 256 299 WriteData(fid,'object',self,'class','smb','fieldname','K','format','Double','scale',1); 300 301 %figure out dt from forcings: 302 time=self.Ta(end,:); %assume all forcings are one the same time step 303 dtime=diff(time,1); 304 dt=min(dtime); 305 WriteData(fid,'data',dt,'enum',SmbDtEnum,'format','Double','scale',yts); 257 306 258 307 %process requested outputs … … 264 313 end 265 314 WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray'); 266 267 315 end % }}} 268 316 end -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r19528 r19554 350 350 def SmbNumRequestedOutputsEnum(): return StringToEnum("SmbNumRequestedOutputs")[0] 351 351 def SmbRequestedOutputsEnum(): return StringToEnum("SmbRequestedOutputs")[0] 352 def SmbIsInitializedEnum(): return StringToEnum("SmbIsInitialized")[0] 352 353 def SMBforcingEnum(): return StringToEnum("SMBforcing")[0] 353 354 def SmbMassBalanceEnum(): return StringToEnum("SmbMassBalance")[0] … … 364 365 def SmbTzEnum(): return StringToEnum("SmbTz")[0] 365 366 def SmbVzEnum(): return StringToEnum("SmbVz")[0] 366 def SmbSpinUpEnum(): return StringToEnum("SmbSpinUp")[0] 367 def SmbDtEnum(): return StringToEnum("SmbDt")[0] 368 def SmbDzEnum(): return StringToEnum("SmbDz")[0] 367 369 def SmbAIdxEnum(): return StringToEnum("SmbAIdx")[0] 368 370 def SmbSwIdxEnum(): return StringToEnum("SmbSwIdx")[0] … … 381 383 def SmbT0dryEnum(): return StringToEnum("SmbT0dry")[0] 382 384 def SmbKEnum(): return StringToEnum("SmbK")[0] 385 def SmbDEnum(): return StringToEnum("SmbD")[0] 386 def SmbReEnum(): return StringToEnum("SmbRe")[0] 387 def SmbGdnEnum(): return StringToEnum("SmbGdn")[0] 388 def SmbGspEnum(): return StringToEnum("SmbGsp")[0] 389 def SmbECEnum(): return StringToEnum("SmbEC")[0] 390 def SmbWEnum(): return StringToEnum("SmbW")[0] 391 def SmbAEnum(): return StringToEnum("SmbA")[0] 392 def SmbTEnum(): return StringToEnum("SmbT")[0] 393 def SmbIsgraingrowthEnum(): return StringToEnum("SmbIsgraingrowth")[0] 394 def SmbIsalbedoEnum(): return StringToEnum("SmbIsalbedo")[0] 395 def SmbIsshortwaveEnum(): return StringToEnum("SmbIsshortwave")[0] 396 def SmbIsthermalEnum(): return StringToEnum("SmbIsthermal")[0] 397 def SmbIsaccumulationEnum(): return StringToEnum("SmbIsaccumulation")[0] 398 def SmbIsmeltEnum(): return StringToEnum("SmbIsmelt")[0] 399 def SmbIsdensificationEnum(): return StringToEnum("SmbIsdensification")[0] 400 def SmbIsturbulentfluxEnum(): return StringToEnum("SmbIsturbulentflux")[0] 383 401 def SMBpddEnum(): return StringToEnum("SMBpdd")[0] 384 402 def SmbDelta18oEnum(): return StringToEnum("SmbDelta18o")[0] … … 504 522 def DatasetInputEnum(): return StringToEnum("DatasetInput")[0] 505 523 def DoubleInputEnum(): return StringToEnum("DoubleInput")[0] 524 def DoubleArrayInputEnum(): return StringToEnum("DoubleArrayInput")[0] 506 525 def DataSetParamEnum(): return StringToEnum("DataSetParam")[0] 507 526 def DoubleMatArrayParamEnum(): return StringToEnum("DoubleMatArrayParam")[0] … … 672 691 def GiaWEnum(): return StringToEnum("GiaW")[0] 673 692 def P0Enum(): return StringToEnum("P0")[0] 693 def P0ArrayEnum(): return StringToEnum("P0Array")[0] 674 694 def P1Enum(): return StringToEnum("P1")[0] 675 695 def P1DGEnum(): return StringToEnum("P1DG")[0] -
issm/trunk-jpl/test/NightlyRun/gemb.m
r19527 r19554 23 23 md.smb.pAir=[repmat(inputs.pAir0',md.mesh.numberofelements,1);dateN']; 24 24 25 md.smb.Vz= inputs.LP.Vz;26 md.smb.Tz= inputs.LP.Tz;27 md.smb.Tmean= inputs.LP.Tmean;28 md.smb.C= inputs.LP.C;25 md.smb.Vz=repmat(inputs.LP.Vz,md.mesh.numberofelements,1); 26 md.smb.Tz=repmat(inputs.LP.Tz,md.mesh.numberofelements,1); 27 md.smb.Tmean=repmat(inputs.LP.Tmean,md.mesh.numberofelements,1); 28 md.smb.C=repmat(inputs.LP.C,md.mesh.numberofelements,1); 29 29 30 30 %settings 31 md.smb.spinUp=2; 31 md.smb.ismelt=0; 32 md.smb.isthermal=0; 33 md.smb.isalbedo=0; 34 md.transient.isstressbalance=0; 35 md.transient.ismasstransport=0; 36 md.transient.isthermal=0; 37 md.timestepping.start_time=2000; 38 md.timestepping.final_time=2001; 39 md.timestepping.time_step=1/12; %monthly 40 41 md.verbose=verbose('11111111'); 32 42 33 43 %Run transient
Note:
See TracChangeset
for help on using the changeset viewer.