Changeset 26495
- Timestamp:
- 10/22/21 05:36:58 (3 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 3 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r26487 r26495 93 93 break; 94 94 case FrontalForcingsRignotEnum: 95 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.basin_id",FrontalForcingsBasinIdEnum); 96 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 97 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum); 98 break; 95 /*Retrieve thermal forcing only in the case of non-autoregressive FrontalForcingsRignot*/ 96 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum); 97 /* Do not break here, still retrieve basin_ID,subglacial_discharge, etc.*/ 98 case FrontalForcingsRignotAutoregressionEnum: 99 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.basin_id",FrontalForcingsBasinIdEnum); 100 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 101 break; 99 102 default: 100 103 _error_("Frontal forcings"<<EnumToStringx(melt_parameterization)<<" not supported yet"); … … 137 140 int melt_parameterization; 138 141 iomodel->FindConstant(&melt_parameterization,"md.frontalforcings.parameterization"); 142 int M,N; 143 IssmDouble* transparam = NULL; 139 144 switch(melt_parameterization){ 140 145 case FrontalForcingsDefaultEnum: 141 146 break; 147 case FrontalForcingsRignotAutoregressionEnum: 148 /*Retrieve autoregressive parameters*/ 149 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.randomflag",FrontalForcingsRandomflagEnum)); 150 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ar_order",FrontalForcingsAutoregressiveOrderEnum)); 151 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ar_initialtime",FrontalForcingsAutoregressionInitialTimeEnum)); 152 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ar_timestep",FrontalForcingsAutoregressionTimestepEnum)); 153 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.beta0"); 154 parameters->AddObject(new DoubleVecParam(FrontalForcingsBeta0Enum,transparam,N)); 155 xDelete<IssmDouble>(transparam); 156 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.beta1"); 157 parameters->AddObject(new DoubleVecParam(FrontalForcingsBeta1Enum,transparam,N)); 158 xDelete<IssmDouble>(transparam); 159 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.phi"); 160 parameters->AddObject(new DoubleMatParam(FrontalForcingsPhiEnum,transparam,M,N)); 161 xDelete<IssmDouble>(transparam); 162 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.covmat"); 163 parameters->AddObject(new DoubleMatParam(FrontalForcingsCovmatEnum,transparam,M,N)); 164 xDelete<IssmDouble>(transparam); 165 /*Do not break here, generic FrontalForcingsRignot parameters still to be retrieved*/ 142 166 case FrontalForcingsRignotEnum: 143 167 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_basins",FrontalForcingsNumberofBasinsEnum)); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r26487 r26495 59 59 } 60 60 return false; 61 }/*}}}*/ 62 void Element::AutoregressionInit(int numbasins,int arorder,int nspin,IssmDouble starttime,IssmDouble tstep_ar,IssmDouble tinit_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noisespin,int enum_type){/*{{{*/ 63 64 const int numvertices = this->GetNumberOfVertices(); 65 int basinid; 66 IssmDouble tspin,beta0_basin,beta1_basin,noisespin_basin; 67 IssmDouble* phi_basin = xNew<IssmDouble>(arorder); 68 IssmDouble* varspin = xNewZeroInit<IssmDouble>(numvertices*arorder); 69 70 /*Get Basin ID and Basin coefficients*/ 71 if(enum_type==SMBautoregressionEnum) this->GetInputValue(&basinid,SmbBasinsIdEnum); 72 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->GetInputValue(&basinid,FrontalForcingsBasinIdEnum); 73 for(int i=0;i<arorder;i++) phi_basin[i] = phi[basinid*arorder+i]; 74 beta0_basin = beta0[basinid]; 75 beta1_basin = beta1[basinid]; 76 77 /*Loop over number of spin-up steps for all vertices*/ 78 for(int j=0;j<nspin;j++){ 79 tspin = starttime-((nspin-j)*tstep_ar); 80 noisespin_basin = noisespin[j*numbasins+basinid]; 81 IssmDouble* oldvarspin = xNew<IssmDouble>(numvertices*arorder); 82 for(int i=0;i<numvertices*arorder;i++) oldvarspin[i]=varspin[i]; 83 84 for(int v=0;v<numvertices;v++){ 85 IssmDouble autoregressionterm = 0.; 86 for(int i=0;i<arorder;i++) autoregressionterm += phi_basin[i]*varspin[v+i*numvertices]; 87 varspin[v] = beta0_basin+beta1_basin*(tspin-tinit_ar)+autoregressionterm+noisespin_basin; 88 } 89 90 /*Adjustt older values in varspin*/ 91 for(int i=0;i<(arorder-1)*numvertices;i++) varspin[i+numvertices]=oldvarspin[i]; 92 93 xDelete<IssmDouble>(oldvarspin); 94 } 95 if(enum_type==SMBautoregressionEnum) this->inputs->SetArrayInput(SmbValuesAutoregressionEnum,this->lid,varspin,numvertices*arorder); 96 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->inputs->SetArrayInput(ThermalforcingValuesAutoregressionEnum,this->lid,varspin,numvertices*arorder); 97 98 99 /*Cleanup and return*/ 100 xDelete<IssmDouble>(varspin); 101 xDelete<IssmDouble>(phi_basin); 102 }/*}}}*/ 103 void Element::Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noiseterms,int enum_type){/*{{{*/ 104 105 const int numvertices = this->GetNumberOfVertices(); 106 int basinid,M,N; 107 IssmDouble beta0_basin,beta1_basin,noise_basin; 108 IssmDouble* phi_basin = xNew<IssmDouble>(arorder); 109 IssmDouble* varlist = xNew<IssmDouble>(numvertices); 110 IssmDouble* valuesautoregression = NULL; 111 112 /*Get Basin ID and Basin coefficients*/ 113 if(enum_type==SMBautoregressionEnum) this->GetInputValue(&basinid,SmbBasinsIdEnum); 114 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->GetInputValue(&basinid,FrontalForcingsBasinIdEnum); 115 for(int ii=0;ii<arorder;ii++) phi_basin[ii] = phi[basinid*arorder+ii]; 116 beta0_basin = beta0[basinid]; 117 beta1_basin = beta1[basinid]; 118 noise_basin = noiseterms[basinid]; 119 if(enum_type==SMBautoregressionEnum) this->inputs->GetArray(SmbValuesAutoregressionEnum,this->lid,&valuesautoregression,&M); 120 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->inputs->GetArray(ThermalforcingValuesAutoregressionEnum,this->lid,&valuesautoregression,&M); 121 122 /*If not AR model timestep: take the old values of variable*/ 123 if(isstepforar==false){ 124 for(int i=0;i<numvertices;i++) varlist[i]=valuesautoregression[i]; 125 } 126 /*If AR model timestep: compute variable values on vertices from AR*/ 127 else{ 128 for(int v=0;v<numvertices;v++){ 129 130 /*Compute autoregressive term*/ 131 IssmDouble autoregressionterm=0.; 132 for(int ii=0;ii<arorder;ii++) autoregressionterm += phi_basin[ii]*valuesautoregression[v+ii*numvertices]; 133 134 /*Stochastic variable value*/ 135 varlist[v] = beta0_basin+beta1_basin*telapsed_ar+autoregressionterm+noise_basin; 136 } 137 /*Update autoregression TF values*/ 138 IssmDouble* temparray = xNew<IssmDouble>(numvertices*arorder); 139 /*Assign newest values and shift older values*/ 140 for(int i=0;i<numvertices;i++) temparray[i] = varlist[i]; 141 for(int i=0;i<(arorder-1)*numvertices;i++) temparray[i+numvertices] = valuesautoregression[i]; 142 if(enum_type==SMBautoregressionEnum) this->inputs->SetArrayInput(SmbValuesAutoregressionEnum,this->lid,temparray,numvertices*arorder); 143 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->inputs->SetArrayInput(ThermalforcingValuesAutoregressionEnum,this->lid,temparray,numvertices*arorder); 144 xDelete<IssmDouble>(temparray); 145 } 146 147 //if(this->lid==55){_printf_("varlist: "<<varlist[0]<<" "<<varlist[1]<<" "<<varlist[2]<<" "<<"noise_basin: "<<noise_basin<<" "<<'\n');} 148 149 /*Add input to element*/ 150 if(enum_type==SMBautoregressionEnum) this->AddInput(SmbMassBalanceEnum,varlist,P1Enum); 151 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->AddInput(FrontalForcingsThermalForcingEnum,varlist,P1Enum); 152 153 /*Cleanup*/ 154 xDelete<IssmDouble>(phi_basin); 155 xDelete<IssmDouble>(varlist); 156 xDelete<IssmDouble>(valuesautoregression); 61 157 }/*}}}*/ 62 158 void Element::ComputeLambdaS(){/*{{{*/ … … 3658 3754 } 3659 3755 /*}}}*/ 3660 void Element::SmbautoregressionInit(int numbasins,int arorder,int nspin,IssmDouble starttime,IssmDouble tstep_ar,IssmDouble tinit_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noisespin){/*{{{*/3661 3662 const int numvertices = this->GetNumberOfVertices();3663 int basinid;3664 IssmDouble tspin,beta0_basin,beta1_basin,noisespin_basin;3665 IssmDouble* phi_basin = xNew<IssmDouble>(arorder);3666 IssmDouble* smbspin = xNewZeroInit<IssmDouble>(numvertices*arorder);3667 3668 /*Get Basin ID and Basin coefficients*/3669 this->GetInputValue(&basinid,SmbBasinsIdEnum);3670 for(int i=0;i<arorder;i++) phi_basin[i] = phi[basinid*arorder+i];3671 beta0_basin = beta0[basinid];3672 beta1_basin = beta1[basinid];3673 3674 /*Loop over number of spin-up steps for all vertices*/3675 for(int j=0;j<nspin;j++){3676 tspin = starttime-((nspin-j)*tstep_ar);3677 noisespin_basin = noisespin[j*numbasins+basinid];3678 IssmDouble* oldsmbspin = xNew<IssmDouble>(numvertices*arorder);3679 for(int i=0;i<numvertices*arorder;i++) oldsmbspin[i]=smbspin[i];3680 3681 for(int v=0;v<numvertices;v++){3682 IssmDouble autoregressionterm = 0.;3683 for(int i=0;i<arorder;i++) autoregressionterm += phi_basin[i]*smbspin[v+i*numvertices];3684 smbspin[v] = beta0_basin+beta1_basin*(tspin-tinit_ar)+autoregressionterm+noisespin_basin; //compute newest values in smbspin3685 }3686 3687 /*Correct older values in smbspin*/3688 for(int i=0;i<(arorder-1)*numvertices;i++) smbspin[i+numvertices]=oldsmbspin[i];3689 3690 xDelete<IssmDouble>(oldsmbspin);3691 }3692 this->inputs->SetArrayInput(SmbValuesAutoregressionEnum,this->lid,smbspin,numvertices*arorder);3693 3694 /*Cleanup and return*/3695 xDelete<IssmDouble>(smbspin);3696 xDelete<IssmDouble>(phi_basin);3697 }/*}}}*/3698 void Element::Smbautoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noiseterms){/*{{{*/3699 3700 const int numvertices = this->GetNumberOfVertices();3701 int basinid,M,N;3702 IssmDouble beta0_basin,beta1_basin,noise_basin;3703 IssmDouble* phi_basin = xNew<IssmDouble>(arorder);3704 IssmDouble* smblist = xNew<IssmDouble>(numvertices);3705 IssmDouble* smbvaluesautoregression = NULL;3706 3707 /*Get Basin ID and Basin coefficients*/3708 this->GetInputValue(&basinid,SmbBasinsIdEnum);3709 for(int ii=0;ii<arorder;ii++) phi_basin[ii] = phi[basinid*arorder+ii];3710 beta0_basin = beta0[basinid];3711 beta1_basin = beta1[basinid];3712 noise_basin = noiseterms[basinid];3713 this->inputs->GetArray(SmbValuesAutoregressionEnum,this->lid,&smbvaluesautoregression,&M);3714 3715 /*If not AR model timestep: take the old SMB values*/3716 if(isstepforar==false){3717 /*VV do something with the lapse rate here if needed (12Oct2021)*/3718 for(int i=0;i<numvertices;i++) smblist[i]=smbvaluesautoregression[i];3719 }3720 /*If AR model timestep: compute SMB values on vertices from AR*/3721 else{3722 for(int v=0;v<numvertices;v++){3723 3724 /*Compute autoregressive term*/3725 IssmDouble autoregressionterm=0.;3726 for(int ii=0;ii<arorder;ii++) autoregressionterm += phi_basin[ii]*smbvaluesautoregression[v+ii*numvertices];3727 3728 /*Stochastic SMB value*/3729 smblist[v] = beta0_basin+beta1_basin*telapsed_ar+autoregressionterm+noise_basin;3730 }3731 /*Update autoregression smb values*/3732 IssmDouble* temparray = xNew<IssmDouble>(numvertices*arorder);3733 /*Assign newest values and shift older values*/3734 for(int i=0;i<numvertices;i++) temparray[i] = smblist[i];3735 for(int i=0;i<(arorder-1)*numvertices;i++) temparray[i+numvertices] = smbvaluesautoregression[i];3736 this->inputs->SetArrayInput(SmbValuesAutoregressionEnum,this->lid,temparray,numvertices*arorder);3737 xDelete<IssmDouble>(temparray);3738 }3739 /*Add input to element*/3740 this->AddInput(SmbMassBalanceEnum,smblist,P1Enum);3741 3742 /*Cleanup*/3743 xDelete<IssmDouble>(phi_basin);3744 xDelete<IssmDouble>(smblist);3745 xDelete<IssmDouble>(smbvaluesautoregression);3746 }/*}}}*/3747 3756 void Element::SmbGemb(IssmDouble timeinputs, int count){/*{{{*/ 3748 3757 -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r26487 r26495 68 68 /*bool AnyActive(void);*/ 69 69 bool AnyFSet(void); 70 void AutoregressionInit(int numbasins,int arorder,int nspin,IssmDouble starttime,IssmDouble tstep_ar,IssmDouble tinit_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noisespin,int enum_type); 71 void Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noiseterms,int enum_type); 70 72 void ComputeLambdaS(void); 71 73 void ComputeNewDamage(); … … 178 180 void SmbSemic(); 179 181 int Sid(); 180 void SmbautoregressionInit(int numbasins,int arorder,int nspin,IssmDouble starttime,IssmDouble tstep_ar,IssmDouble tinit_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noisespin);181 void Smbautoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,IssmDouble* noiseterms);182 182 void SmbGemb(IssmDouble timeinputs, int count); 183 183 void StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r26468 r26495 6 6 #include "../../shared/shared.h" 7 7 #include "../../toolkits/toolkits.h" 8 #include "../../shared/Random/random.h" 8 9 9 void FrontalForcingsx(FemModel* femmodel){ 10 void FrontalForcingsx(FemModel* femmodel){/*{{{*/ 10 11 11 12 /*Recover melt_parameterization*/ … … 17 18 case FrontalForcingsDefaultEnum: 18 19 break; 20 case FrontalForcingsRignotAutoregressionEnum: 21 Thermalforcingautoregressionx(femmodel); 22 /*Do not break here, call IcefrontAreax(),RignotMeltParameterizationx()*/ 19 23 case FrontalForcingsRignotEnum: 20 24 femmodel->IcefrontAreax(); … … 24 28 _error_("Frontal forcings "<<EnumToStringx(melt_parameterization)<<" not supported yet"); 25 29 } 26 } 30 }/*}}}*/ 31 void ThermalforcingautoregressionInitx(FemModel* femmodel){/*{{{*/ 32 33 /*Initialization step of Thermalforcingautoregressionx*/ 34 int M,N,Nphi,arorder,numbasins,my_rank; 35 IssmDouble starttime,tstep_ar,tinit_ar; 36 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 37 femmodel->parameters->FindParam(&arorder,FrontalForcingsAutoregressiveOrderEnum); 38 IssmDouble* beta0 = NULL; 39 IssmDouble* beta1 = NULL; 40 IssmDouble* phi = NULL; 41 IssmDouble* covmat = NULL; 42 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 43 femmodel->parameters->FindParam(&tstep_ar,FrontalForcingsAutoregressionTimestepEnum); 44 femmodel->parameters->FindParam(&tinit_ar,FrontalForcingsAutoregressionInitialTimeEnum); 45 femmodel->parameters->FindParam(&beta0,&M,FrontalForcingsBeta0Enum); _assert_(M==numbasins); 46 femmodel->parameters->FindParam(&beta1,&M,FrontalForcingsBeta1Enum); _assert_(M==numbasins); 47 femmodel->parameters->FindParam(&phi,&M,&Nphi,FrontalForcingsPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder); 48 femmodel->parameters->FindParam(&covmat,&M,&N,FrontalForcingsCovmatEnum); _assert_(M==numbasins); _assert_(N==numbasins); 49 50 /*AR model spin-up*/ 51 int nspin{2*arorder+5}; 52 IssmDouble* noisespin = xNewZeroInit<IssmDouble>(numbasins*nspin); 53 my_rank=IssmComm::GetRank(); 54 if(my_rank==0){ 55 bool randomflag{}; 56 femmodel->parameters->FindParam(&randomflag,FrontalForcingsRandomflagEnum); 57 int fixedseed; 58 for(int i=0;i<nspin;i++){ 59 IssmDouble* temparray = NULL; 60 /*Determine whether random seed is fixed to for loop step (randomflag==false) or random seed truly random (randomflag==true)*/ 61 if(randomflag) fixedseed=-1; 62 else fixedseed = i; 63 multivariateNormal(&temparray,numbasins,0.0,covmat,fixedseed); 64 for(int j=0;j<numbasins;j++){noisespin[i*numbasins+j]=temparray[j];} 65 xDelete<IssmDouble>(temparray); 66 } 67 } 68 ISSM_MPI_Bcast(noisespin,numbasins*nspin,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 69 70 /*Initialize ThermalforcingValuesAutoregressionEnum*/ 71 for(Object* &object:femmodel->elements->objects){ 72 Element* element = xDynamicCast<Element*>(object); //generate element object 73 element->AutoregressionInit(numbasins,arorder,nspin,starttime,tstep_ar,tinit_ar,beta0,beta1,phi,noisespin,FrontalForcingsRignotAutoregressionEnum); 74 } 75 76 /*Cleanup*/ 77 xDelete<IssmDouble>(beta0); 78 xDelete<IssmDouble>(beta1); 79 xDelete<IssmDouble>(phi); 80 xDelete<IssmDouble>(noisespin); 81 xDelete<IssmDouble>(covmat); 82 }/*}}}*/ 83 void Thermalforcingautoregressionx(FemModel* femmodel){/*{{{*/ 84 85 /*Get time parameters*/ 86 IssmDouble time,dt,starttime,tstep_ar; 87 femmodel->parameters->FindParam(&time,TimeEnum); 88 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 89 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 90 femmodel->parameters->FindParam(&tstep_ar,FrontalForcingsAutoregressionTimestepEnum); 91 92 /*Initialize module at first time step*/ 93 if(time<=starttime+dt){ThermalforcingautoregressionInitx(femmodel);} 94 /*Determine if this is a time step for the AR model*/ 95 bool isstepforar = false; 96 97 #ifndef _HAVE_AD_ 98 if((fmod(time,tstep_ar)<fmod((time-dt),tstep_ar)) || (time<=starttime+dt) || tstep_ar==dt) isstepforar = true; 99 #else 100 _error_("not implemented yet"); 101 #endif 102 103 /*Load parameters*/ 104 int M,N,Nphi,arorder,numbasins,my_rank; 105 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 106 femmodel->parameters->FindParam(&arorder,FrontalForcingsAutoregressiveOrderEnum); 107 IssmDouble tinit_ar; 108 IssmDouble* beta0 = NULL; 109 IssmDouble* beta1 = NULL; 110 IssmDouble* phi = NULL; 111 IssmDouble* covmat = NULL; 112 IssmDouble* noiseterms = xNew<IssmDouble>(numbasins); 113 femmodel->parameters->FindParam(&tinit_ar,FrontalForcingsAutoregressionInitialTimeEnum); 114 femmodel->parameters->FindParam(&beta0,&M,FrontalForcingsBeta0Enum); _assert_(M==numbasins); 115 femmodel->parameters->FindParam(&beta1,&M,FrontalForcingsBeta1Enum); _assert_(M==numbasins); 116 femmodel->parameters->FindParam(&phi,&M,&Nphi,FrontalForcingsPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder); 117 femmodel->parameters->FindParam(&covmat,&M,&N,FrontalForcingsCovmatEnum); _assert_(M==numbasins); _assert_(N==numbasins); 118 119 /*Time elapsed with respect to AR model initial time*/ 120 IssmDouble telapsed_ar = time-tinit_ar; 121 122 /*Before looping through elements: compute noise term specific to each basin from covmat*/ 123 my_rank=IssmComm::GetRank(); 124 if(my_rank==0){ 125 bool randomflag{}; 126 femmodel->parameters->FindParam(&randomflag,FrontalForcingsRandomflagEnum); 127 /*Determine whether random seed is fixed to time step (randomflag==false) or random seed truly random (randomflag==true)*/ 128 int fixedseed; 129 if(randomflag) fixedseed=-1; 130 else fixedseed = reCast<int,IssmDouble>((time-starttime)/dt); 131 /*multivariateNormal needs to be passed a NULL pointer to avoid memory leak issues*/ 132 IssmDouble* temparray = NULL; 133 multivariateNormal(&temparray,numbasins,0.0,covmat,fixedseed); 134 for(int i=0;i<numbasins;i++) noiseterms[i]=temparray[i]; 135 xDelete<IssmDouble>(temparray); 136 } 137 ISSM_MPI_Bcast(noiseterms,numbasins,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 138 139 /*Loop over each element to compute SMB at vertices*/ 140 for(Object* &object:femmodel->elements->objects){ 141 Element* element = xDynamicCast<Element*>(object); 142 element->Autoregression(isstepforar,arorder,telapsed_ar,beta0,beta1,phi,noiseterms,FrontalForcingsRignotAutoregressionEnum); 143 } 144 145 /*Cleanup*/ 146 xDelete<IssmDouble>(beta0); 147 xDelete<IssmDouble>(beta1); 148 xDelete<IssmDouble>(phi); 149 xDelete<IssmDouble>(noiseterms); 150 xDelete<IssmDouble>(covmat); 151 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.h
r23652 r26495 7 7 /* local prototypes: */ 8 8 void FrontalForcingsx(FemModel* femmodel); 9 void ThermalforcingautoregressionInitx(FemModel* femmodel); 10 void Thermalforcingautoregressionx(FemModel* femmodel); 9 11 10 12 #endif -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r26487 r26495 154 154 femmodel->parameters->FindParam(&numbasins,SmbNumBasinsEnum); 155 155 femmodel->parameters->FindParam(&arorder,SmbAutoregressiveOrderEnum); 156 IssmDouble* beta0 = xNew<IssmDouble>(numbasins);157 IssmDouble* beta1 = xNew<IssmDouble>(numbasins);158 IssmDouble* phi = xNew<IssmDouble>(numbasins*arorder);159 IssmDouble* covmat = xNew<IssmDouble>(numbasins*numbasins);156 IssmDouble* beta0 = NULL; 157 IssmDouble* beta1 = NULL; 158 IssmDouble* phi = NULL; 159 IssmDouble* covmat = NULL; 160 160 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 161 161 femmodel->parameters->FindParam(&tstep_ar,SmbAutoregressionTimestepEnum); … … 175 175 int fixedseed; 176 176 for(int i=0;i<nspin;i++){ 177 IssmDouble* temparray = xNew<IssmDouble>(numbasins); 177 //IssmDouble* temparray = xNew<IssmDouble>(numbasins); 178 IssmDouble* temparray = NULL; 178 179 /*Determine whether random seed is fixed to for loop step (randomflag==false) or random seed truly random (randomflag==true)*/ 179 180 if(randomflag) fixedseed=-1; … … 189 190 for(Object* &object:femmodel->elements->objects){ 190 191 Element* element = xDynamicCast<Element*>(object); //generate element object 191 element-> SmbautoregressionInit(numbasins,arorder,nspin,starttime,tstep_ar,tinit_ar,beta0,beta1,phi,noisespin);192 element->AutoregressionInit(numbasins,arorder,nspin,starttime,tstep_ar,tinit_ar,beta0,beta1,phi,noisespin,SMBautoregressionEnum); 192 193 } 193 194 … … 224 225 femmodel->parameters->FindParam(&arorder,SmbAutoregressiveOrderEnum); 225 226 IssmDouble tinit_ar; 226 IssmDouble* beta0 = xNew<IssmDouble>(numbasins); 227 IssmDouble* beta1 = xNew<IssmDouble>(numbasins); 228 IssmDouble* phi = xNew<IssmDouble>(numbasins*arorder); 227 IssmDouble* beta0 = NULL; 228 IssmDouble* beta1 = NULL; 229 IssmDouble* phi = NULL; 230 IssmDouble* covmat = NULL; 229 231 IssmDouble* noiseterms = xNew<IssmDouble>(numbasins); 230 IssmDouble* covmat = xNew<IssmDouble>(numbasins*numbasins);231 232 femmodel->parameters->FindParam(&tinit_ar,SmbAutoregressionInitialTimeEnum); 232 233 femmodel->parameters->FindParam(&beta0,&M,SmbBeta0Enum); _assert_(M==numbasins); … … 247 248 if(randomflag) fixedseed=-1; 248 249 else fixedseed = reCast<int,IssmDouble>((time-starttime)/dt); 249 multivariateNormal(&noiseterms,numbasins,0.0,covmat,fixedseed); 250 /*multivariateNormal needs to be passed a NULL pointer to avoid memory leak issues*/ 251 IssmDouble* temparray = NULL; 252 multivariateNormal(&temparray,numbasins,0.0,covmat,fixedseed); 253 for(int i=0;i<numbasins;i++) noiseterms[i]=temparray[i]; 254 xDelete<IssmDouble>(temparray); 250 255 } 251 256 ISSM_MPI_Bcast(noiseterms,numbasins,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); … … 254 259 for(Object* &object:femmodel->elements->objects){ 255 260 Element* element = xDynamicCast<Element*>(object); 256 element-> Smbautoregression(isstepforar,arorder,telapsed_ar,beta0,beta1,phi,noiseterms);261 element->Autoregression(isstepforar,arorder,telapsed_ar,beta0,beta1,phi,noiseterms,SMBautoregressionEnum); 257 262 } 258 263 -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r26488 r26495 177 177 syn keyword cConstant FrictionVoidRatioEnum 178 178 syn keyword cConstant FrontalForcingsBasinIcefrontAreaEnum 179 syn keyword cConstant FrontalForcingsAutoregressionInitialTimeEnum 180 syn keyword cConstant FrontalForcingsAutoregressionTimestepEnum 181 syn keyword cConstant FrontalForcingsAutoregressiveOrderEnum 182 syn keyword cConstant FrontalForcingsBeta0Enum 183 syn keyword cConstant FrontalForcingsBeta1Enum 184 syn keyword cConstant FrontalForcingsCovmatEnum 179 185 syn keyword cConstant FrontalForcingsNumberofBasinsEnum 180 186 syn keyword cConstant FrontalForcingsParamEnum 187 syn keyword cConstant FrontalForcingsPhiEnum 188 syn keyword cConstant FrontalForcingsRandomflagEnum 181 189 syn keyword cConstant GrdModelEnum 182 190 syn keyword cConstant GroundinglineFrictionInterpolationEnum … … 1016 1024 syn keyword cConstant TemperaturePicardEnum 1017 1025 syn keyword cConstant TemperatureSEMICEnum 1026 syn keyword cConstant ThermalforcingValuesAutoregressionEnum 1018 1027 syn keyword cConstant ThermalSpctemperatureEnum 1019 1028 syn keyword cConstant ThicknessAbsGradientEnum … … 1262 1271 syn keyword cConstant FrontalForcingsDefaultEnum 1263 1272 syn keyword cConstant FrontalForcingsRignotEnum 1273 syn keyword cConstant FrontalForcingsRignotAutoregressionEnum 1264 1274 syn keyword cConstant FsetEnum 1265 1275 syn keyword cConstant FullMeltOnPartiallyFloatingEnum … … 1553 1563 syn keyword cType Cfsurfacesquare 1554 1564 syn keyword cType Channel 1565 syn keyword cType classes 1555 1566 syn keyword cType Constraint 1556 1567 syn keyword cType Constraints … … 1559 1570 syn keyword cType ControlInput 1560 1571 syn keyword cType Covertree 1572 syn keyword cType DatasetInput 1561 1573 syn keyword cType DataSetParam 1562 syn keyword cType DatasetInput1563 1574 syn keyword cType Definition 1564 1575 syn keyword cType DependentObject … … 1573 1584 syn keyword cType ElementInput 1574 1585 syn keyword cType ElementMatrix 1586 syn keyword cType Elements 1575 1587 syn keyword cType ElementVector 1576 syn keyword cType Elements1577 1588 syn keyword cType ExponentialVariogram 1578 1589 syn keyword cType ExternalResult … … 1581 1592 syn keyword cType Friction 1582 1593 syn keyword cType Gauss 1594 syn keyword cType GaussianVariogram 1595 syn keyword cType gaussobjects 1583 1596 syn keyword cType GaussPenta 1584 1597 syn keyword cType GaussSeg 1585 1598 syn keyword cType GaussTetra 1586 1599 syn keyword cType GaussTria 1587 syn keyword cType GaussianVariogram1588 1600 syn keyword cType GenericExternalResult 1589 1601 syn keyword cType GenericOption … … 1601 1613 syn keyword cType IssmDirectApplicInterface 1602 1614 syn keyword cType IssmParallelDirectApplicInterface 1615 syn keyword cType krigingobjects 1603 1616 syn keyword cType Load 1604 1617 syn keyword cType Loads … … 1611 1624 syn keyword cType Matice 1612 1625 syn keyword cType Matlitho 1626 syn keyword cType matrixobjects 1613 1627 syn keyword cType MatrixParam 1614 1628 syn keyword cType Misfit … … 1623 1637 syn keyword cType Observations 1624 1638 syn keyword cType Option 1639 syn keyword cType Options 1625 1640 syn keyword cType OptionUtilities 1626 syn keyword cType Options1627 1641 syn keyword cType Param 1628 1642 syn keyword cType Parameters … … 1638 1652 syn keyword cType Regionaloutput 1639 1653 syn keyword cType Results 1654 syn keyword cType Riftfront 1640 1655 syn keyword cType RiftStruct 1641 syn keyword cType Riftfront1642 1656 syn keyword cType SealevelGeometry 1643 1657 syn keyword cType Seg 1644 1658 syn keyword cType SegInput 1659 syn keyword cType Segment 1645 1660 syn keyword cType SegRef 1646 syn keyword cType Segment1647 1661 syn keyword cType SpcDynamic 1648 1662 syn keyword cType SpcStatic … … 1663 1677 syn keyword cType Vertex 1664 1678 syn keyword cType Vertices 1665 syn keyword cType classes1666 syn keyword cType gaussobjects1667 syn keyword cType krigingobjects1668 syn keyword cType matrixobjects1669 1679 syn keyword cType AdjointBalancethickness2Analysis 1670 1680 syn keyword cType AdjointBalancethicknessAnalysis -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r26488 r26495 171 171 FrictionVoidRatioEnum, 172 172 FrontalForcingsBasinIcefrontAreaEnum, 173 FrontalForcingsAutoregressionInitialTimeEnum, 174 FrontalForcingsAutoregressionTimestepEnum, 175 FrontalForcingsAutoregressiveOrderEnum, 176 FrontalForcingsBeta0Enum, 177 FrontalForcingsBeta1Enum, 178 FrontalForcingsCovmatEnum, 173 179 FrontalForcingsNumberofBasinsEnum, 174 180 FrontalForcingsParamEnum, 181 FrontalForcingsPhiEnum, 182 FrontalForcingsRandomflagEnum, 175 183 GrdModelEnum, 176 184 GroundinglineFrictionInterpolationEnum, … … 1013 1021 TemperaturePicardEnum, 1014 1022 TemperatureSEMICEnum, 1023 ThermalforcingValuesAutoregressionEnum, 1015 1024 ThermalSpctemperatureEnum, 1016 1025 ThicknessAbsGradientEnum, … … 1261 1270 FrontalForcingsDefaultEnum, 1262 1271 FrontalForcingsRignotEnum, 1272 FrontalForcingsRignotAutoregressionEnum, 1263 1273 FsetEnum, 1264 1274 FullMeltOnPartiallyFloatingEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r26488 r26495 179 179 case FrictionVoidRatioEnum : return "FrictionVoidRatio"; 180 180 case FrontalForcingsBasinIcefrontAreaEnum : return "FrontalForcingsBasinIcefrontArea"; 181 case FrontalForcingsAutoregressionInitialTimeEnum : return "FrontalForcingsAutoregressionInitialTime"; 182 case FrontalForcingsAutoregressionTimestepEnum : return "FrontalForcingsAutoregressionTimestep"; 183 case FrontalForcingsAutoregressiveOrderEnum : return "FrontalForcingsAutoregressiveOrder"; 184 case FrontalForcingsBeta0Enum : return "FrontalForcingsBeta0"; 185 case FrontalForcingsBeta1Enum : return "FrontalForcingsBeta1"; 186 case FrontalForcingsCovmatEnum : return "FrontalForcingsCovmat"; 181 187 case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins"; 182 188 case FrontalForcingsParamEnum : return "FrontalForcingsParam"; 189 case FrontalForcingsPhiEnum : return "FrontalForcingsPhi"; 190 case FrontalForcingsRandomflagEnum : return "FrontalForcingsRandomflag"; 183 191 case GrdModelEnum : return "GrdModel"; 184 192 case GroundinglineFrictionInterpolationEnum : return "GroundinglineFrictionInterpolation"; … … 1018 1026 case TemperaturePicardEnum : return "TemperaturePicard"; 1019 1027 case TemperatureSEMICEnum : return "TemperatureSEMIC"; 1028 case ThermalforcingValuesAutoregressionEnum : return "ThermalforcingValuesAutoregression"; 1020 1029 case ThermalSpctemperatureEnum : return "ThermalSpctemperature"; 1021 1030 case ThicknessAbsGradientEnum : return "ThicknessAbsGradient"; … … 1264 1273 case FrontalForcingsDefaultEnum : return "FrontalForcingsDefault"; 1265 1274 case FrontalForcingsRignotEnum : return "FrontalForcingsRignot"; 1275 case FrontalForcingsRignotAutoregressionEnum : return "FrontalForcingsRignotAutoregression"; 1266 1276 case FsetEnum : return "Fset"; 1267 1277 case FullMeltOnPartiallyFloatingEnum : return "FullMeltOnPartiallyFloating"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r26488 r26495 182 182 else if (strcmp(name,"FrictionVoidRatio")==0) return FrictionVoidRatioEnum; 183 183 else if (strcmp(name,"FrontalForcingsBasinIcefrontArea")==0) return FrontalForcingsBasinIcefrontAreaEnum; 184 else if (strcmp(name,"FrontalForcingsAutoregressionInitialTime")==0) return FrontalForcingsAutoregressionInitialTimeEnum; 185 else if (strcmp(name,"FrontalForcingsAutoregressionTimestep")==0) return FrontalForcingsAutoregressionTimestepEnum; 186 else if (strcmp(name,"FrontalForcingsAutoregressiveOrder")==0) return FrontalForcingsAutoregressiveOrderEnum; 187 else if (strcmp(name,"FrontalForcingsBeta0")==0) return FrontalForcingsBeta0Enum; 188 else if (strcmp(name,"FrontalForcingsBeta1")==0) return FrontalForcingsBeta1Enum; 189 else if (strcmp(name,"FrontalForcingsCovmat")==0) return FrontalForcingsCovmatEnum; 184 190 else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum; 185 191 else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum; 192 else if (strcmp(name,"FrontalForcingsPhi")==0) return FrontalForcingsPhiEnum; 193 else if (strcmp(name,"FrontalForcingsRandomflag")==0) return FrontalForcingsRandomflagEnum; 186 194 else if (strcmp(name,"GrdModel")==0) return GrdModelEnum; 187 195 else if (strcmp(name,"GroundinglineFrictionInterpolation")==0) return GroundinglineFrictionInterpolationEnum; … … 252 260 else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum; 253 261 else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum; 254 else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum; 255 266 else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum; 256 267 else if (strcmp(name,"InversionType")==0) return InversionTypeEnum; … … 260 271 else if (strcmp(name,"LevelsetReinitFrequency")==0) return LevelsetReinitFrequencyEnum; 261 272 else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"LockFileName")==0) return LockFileNameEnum; 273 else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum; 266 274 else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum; 267 275 else if (strcmp(name,"LoveCoreMantleBoundary")==0) return LoveCoreMantleBoundaryEnum; … … 375 383 else if (strcmp(name,"SolidearthSettingsViscous")==0) return SolidearthSettingsViscousEnum; 376 384 else if (strcmp(name,"SealevelchangeGeometryDone")==0) return SealevelchangeGeometryDoneEnum; 377 else if (strcmp(name,"SealevelchangeViscousNumSteps")==0) return SealevelchangeViscousNumStepsEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"SealevelchangeViscousNumSteps")==0) return SealevelchangeViscousNumStepsEnum; 378 389 else if (strcmp(name,"SealevelchangeViscousTimes")==0) return SealevelchangeViscousTimesEnum; 379 390 else if (strcmp(name,"SealevelchangeViscousIndex")==0) return SealevelchangeViscousIndexEnum; … … 383 394 else if (strcmp(name,"TidalLoveL")==0) return TidalLoveLEnum; 384 395 else if (strcmp(name,"TidalLoveK2Secular")==0) return TidalLoveK2SecularEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"LoadLoveH")==0) return LoadLoveHEnum; 396 else if (strcmp(name,"LoadLoveH")==0) return LoadLoveHEnum; 389 397 else if (strcmp(name,"LoadLoveK")==0) return LoadLoveKEnum; 390 398 else if (strcmp(name,"LoadLoveL")==0) return LoadLoveLEnum; … … 498 506 else if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum; 499 507 else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum; 500 else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum; 501 512 else if (strcmp(name,"StressbalanceRiftPenaltyThreshold")==0) return StressbalanceRiftPenaltyThresholdEnum; 502 513 else if (strcmp(name,"StressbalanceShelfDampening")==0) return StressbalanceShelfDampeningEnum; … … 506 517 else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum; 507 518 else if (strcmp(name,"ThermalNumRequestedOutputs")==0) return ThermalNumRequestedOutputsEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum; 519 else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum; 512 520 else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum; 513 521 else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum; … … 621 629 else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum; 622 630 else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum; 623 else if (strcmp(name,"CalvingFluxLevelset")==0) return CalvingFluxLevelsetEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"CalvingFluxLevelset")==0) return CalvingFluxLevelsetEnum; 624 635 else if (strcmp(name,"CalvingMeltingFluxLevelset")==0) return CalvingMeltingFluxLevelsetEnum; 625 636 else if (strcmp(name,"Converged")==0) return ConvergedEnum; … … 629 640 else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum; 630 641 else if (strcmp(name,"DamageDbarOld")==0) return DamageDbarOldEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"DamageF")==0) return DamageFEnum; 642 else if (strcmp(name,"DamageF")==0) return DamageFEnum; 635 643 else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum; 636 644 else if (strcmp(name,"DepthBelowSurface")==0) return DepthBelowSurfaceEnum; … … 744 752 else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum; 745 753 else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum; 746 else if (strcmp(name,"Ice")==0) return IceEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"Ice")==0) return IceEnum; 747 758 else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; 748 759 else if (strcmp(name,"Input")==0) return InputEnum; … … 752 763 else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum; 753 764 else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum; 765 else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum; 758 766 else if (strcmp(name,"LevelsetfunctionSlopeX")==0) return LevelsetfunctionSlopeXEnum; 759 767 else if (strcmp(name,"LevelsetfunctionSlopeY")==0) return LevelsetfunctionSlopeYEnum; … … 867 875 else if (strcmp(name,"SealevelchangeGEsubelOcean")==0) return SealevelchangeGEsubelOceanEnum; 868 876 else if (strcmp(name,"SealevelchangeGNsubelOcean")==0) return SealevelchangeGNsubelOceanEnum; 869 else if (strcmp(name,"SealevelchangeGsubelIce")==0) return SealevelchangeGsubelIceEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"SealevelchangeGsubelIce")==0) return SealevelchangeGsubelIceEnum; 870 881 else if (strcmp(name,"SealevelchangeGUsubelIce")==0) return SealevelchangeGUsubelIceEnum; 871 882 else if (strcmp(name,"SealevelchangeGEsubelIce")==0) return SealevelchangeGEsubelIceEnum; … … 875 886 else if (strcmp(name,"SealevelchangeGEsubelHydro")==0) return SealevelchangeGEsubelHydroEnum; 876 887 else if (strcmp(name,"SealevelchangeGNsubelHydro")==0) return SealevelchangeGNsubelHydroEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"SealevelchangeViscousRSL")==0) return SealevelchangeViscousRSLEnum; 888 else if (strcmp(name,"SealevelchangeViscousRSL")==0) return SealevelchangeViscousRSLEnum; 881 889 else if (strcmp(name,"SealevelchangeViscousU")==0) return SealevelchangeViscousUEnum; 882 890 else if (strcmp(name,"SealevelchangeViscousN")==0) return SealevelchangeViscousNEnum; … … 990 998 else if (strcmp(name,"SmbTz")==0) return SmbTzEnum; 991 999 else if (strcmp(name,"SmbValuesAutoregression")==0) return SmbValuesAutoregressionEnum; 992 else if (strcmp(name,"SmbV")==0) return SmbVEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SmbV")==0) return SmbVEnum; 993 1004 else if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum; 994 1005 else if (strcmp(name,"SmbVz")==0) return SmbVzEnum; … … 998 1009 else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum; 999 1010 else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum; 1011 else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum; 1004 1012 else if (strcmp(name,"SmbZY")==0) return SmbZYEnum; 1005 1013 else if (strcmp(name,"SolidearthExternalDisplacementEastRate")==0) return SolidearthExternalDisplacementEastRateEnum; … … 1042 1050 else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum; 1043 1051 else if (strcmp(name,"TemperatureSEMIC")==0) return TemperatureSEMICEnum; 1052 else if (strcmp(name,"ThermalforcingValuesAutoregression")==0) return ThermalforcingValuesAutoregressionEnum; 1044 1053 else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum; 1045 1054 else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; … … 1112 1121 else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum; 1113 1122 else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum; 1114 else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum; 1115 1127 else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum; 1116 1128 else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum; … … 1121 1133 else if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum; 1122 1134 else if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum; 1135 else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum; 1127 1136 else if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum; 1128 1137 else if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum; … … 1235 1244 else if (strcmp(name,"Contact")==0) return ContactEnum; 1236 1245 else if (strcmp(name,"Contour")==0) return ContourEnum; 1237 else if (strcmp(name,"Contours")==0) return ContoursEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"Contours")==0) return ContoursEnum; 1238 1250 else if (strcmp(name,"ControlInput")==0) return ControlInputEnum; 1239 1251 else if (strcmp(name,"ControlInputGrad")==0) return ControlInputGradEnum; … … 1244 1256 else if (strcmp(name,"Cuffey")==0) return CuffeyEnum; 1245 1257 else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum; 1258 else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum; 1250 1259 else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum; 1251 1260 else if (strcmp(name,"DataSet")==0) return DataSetEnum; … … 1294 1303 else if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum; 1295 1304 else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum; 1305 else if (strcmp(name,"FrontalForcingsRignotAutoregression")==0) return FrontalForcingsRignotAutoregressionEnum; 1296 1306 else if (strcmp(name,"Fset")==0) return FsetEnum; 1297 1307 else if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum; … … 1357 1367 else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum; 1358 1368 else if (strcmp(name,"LambdaS")==0) return LambdaSEnum; 1359 else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 1360 1373 else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum; 1361 1374 else if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum; … … 1367 1380 else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum; 1368 1381 else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"LoveKi")==0) return LoveKiEnum; 1382 else if (strcmp(name,"LoveKi")==0) return LoveKiEnum; 1373 1383 else if (strcmp(name,"LoveKr")==0) return LoveKrEnum; 1374 1384 else if (strcmp(name,"LoveLi")==0) return LoveLiEnum; … … 1480 1490 else if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum; 1481 1491 else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum; 1482 else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum; 1483 1496 else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum; 1484 1497 else if (strcmp(name,"Scaled")==0) return ScaledEnum; … … 1490 1503 else if (strcmp(name,"SealevelchangePolarMotion")==0) return SealevelchangePolarMotionEnum; 1491 1504 else if (strcmp(name,"SealevelNmotion")==0) return SealevelNmotionEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum; 1505 else if (strcmp(name,"SealevelUmotion")==0) return SealevelUmotionEnum; 1496 1506 else if (strcmp(name,"SealevelchangeAnalysis")==0) return SealevelchangeAnalysisEnum; 1497 1507 else if (strcmp(name,"Seg")==0) return SegEnum; -
issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
r26477 r26495 274 274 case 1: return FrontalForcingsDefaultEnum; 275 275 case 2: return FrontalForcingsRignotEnum; 276 case 55: return FrontalForcingsRignotAutoregressionEnum; 276 277 default: _error_("Marshalled Frontalforcings code \""<<enum_in<<"\" not supported yet"); 277 278 } -
issm/trunk-jpl/test/NightlyRun/test257.m
r26487 r26495 31 31 end 32 32 end 33 34 %SMB parameters 35 md.timestepping.start_time = 0; 36 md.timestepping.time_step = 1; 37 md.timestepping.final_time = 5; 38 md.smb = SMBautoregression(); 39 md.smb.num_basins = 3; %number of basins 40 md.smb.basin_id = idbasin; %prescribe basin ID number to elements 41 md.smb.beta0 = [0.5,1.2,1.5]; %intercept values of SMB in basins [m ice eq./yr] 42 md.smb.beta1 = [0.0,0.01,-0.01]; %trend values of SMB in basins [m ice eq./yr^2] 43 md.smb.ar_initialtime = md.timestepping.start_time; 44 md.smb.ar_order = 4; 45 md.smb.ar_timestep = 2.0; %timestep of the autoregressive model [yr] 46 md.smb.phi = [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1];[0.4,-0.4,0.1,-0.1]]; 47 md.smb.covmat = [[0.15 0.08 -0.02];[0.08 0.12 -0.05];[-0.02 -0.05 0.1]]; 48 md.smb.randomflag = 0; %fixed random seeds 33 49 34 50 md=solve(md,'Transient'); -
issm/trunk-jpl/test/NightlyRun/test542.m
r26487 r26495 9 9 %separate domain in 2 basins 10 10 idbasin = zeros(md.mesh.numberofelements,1); 11 iid1 = find(md.mesh. y>=mean(md.mesh.y));11 iid1 = find(md.mesh.x<=-1.6e6); 12 12 for ii=1:md.mesh.numberofelements 13 13 for vertex=1:3
Note:
See TracChangeset
for help on using the changeset viewer.