Changeset 18545
- Timestamp:
- 09/26/14 11:19:18 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
r18476 r18545 30 30 iomodel->FetchDataToInput(elements,BaseEnum); 31 31 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum); 32 iomodel->FetchDataToInput(elements,FrictionCoefficientEnum); 32 33 iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum); 33 34 iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum); … … 105 106 106 107 /*Intermediaries */ 107 IssmDouble dhdt,mb,ms, dD[2],db[2],Jdet;108 IssmDouble dhdt,mb,ms,D,db[2],Jdet; 108 109 IssmDouble* xyz_list = NULL; 109 110 … … 114 115 ElementVector* pe = element->NewElementVector(); 115 116 IssmDouble* basis = xNew<IssmDouble>(numnodes); 117 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 116 118 117 119 /*Retrieve all inputs and parameters*/ … … 130 132 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 131 133 element->NodalFunctions(basis,gauss); 134 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 132 135 133 136 ms_input->GetInputValue(&ms,gauss); 134 137 mb_input->GetInputValue(&mb,gauss); 135 138 dhdt_input->GetInputValue(&dhdt,gauss); 139 D_input->GetInputValue(&D,gauss); 136 140 bed_input->GetInputDerivativeValue(&db[0],xyz_list,gauss); 137 D_input->GetInputDerivativeValue(&dD[0],xyz_list,gauss); 138 db[0]=0.; 139 db[1]=0.; 140 141 /*Since grad(b) is constant div(D grad(b) ) = grad(D).grad(b)*/ 142 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms-mb-dhdt +dD[0]*db[0]+dD[1]*db[1])*basis[i]; 141 //db[0]=0.; 142 //db[1]=0.; 143 144 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*( 145 (ms-mb-dhdt)*basis[i] 146 -D*db[0]*dbasis[0*numnodes+i] - D*db[1]*dbasis[1*numnodes+i] 147 ); 143 148 } 144 149 … … 167 172 168 173 /*Intermediaries */ 169 IssmDouble omega,h,mu0,ds[2],Cmu,B;170 const int n = 3 .;174 IssmDouble Gamma,h,mu0,ds[2],Cmu,B,k; 175 const int n = 3; 171 176 const IssmDouble Hstar = 500.; 172 177 const IssmDouble Lstar = 500.e+3; … … 183 188 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 184 189 Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input); 190 Input* k_input = element->GetInput(FrictionCoefficientEnum);_assert_(k_input); 185 191 IssmDouble rhog = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum); 186 192 … … 191 197 192 198 B_input->GetInputValue(&B,gauss); 199 k_input->GetInputValue(&k,gauss); 193 200 thickness_input->GetInputValue(&h,gauss); 194 201 surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss); 195 202 196 mu0 = pow(2.,(1 .-3*n)/(2.*n)) * B;197 omega = pow(rhog,3) * pow(Hstar,2*(n+1)) * pow(Hstar/Lstar,2*(n+1)) * 1./pow(mu0,n);198 Cmu = 0.;199 200 D[i] = omega*(ds[0]*ds[0]+ds[1]*ds[1])*pow(h,4)*(1./5.*h - Cmu);203 mu0 = pow(2.,(1-3*n)/(2.*n)) * B; 204 Gamma = pow(rhog,n) * pow(Hstar,2*(n+1)) * pow(Hstar/Lstar,2*(n+1)) * 1./pow(mu0,n); 205 Cmu = mu0/Hstar/(k*k); 206 207 D[i] = Gamma*pow(ds[0]*ds[0]+ds[1]*ds[1],(n-1)/2)*pow(h,n+1)*(1./(n+2.)*h - Cmu); 201 208 } 202 209
Note:
See TracChangeset
for help on using the changeset viewer.