Changeset 18545


Ignore:
Timestamp:
09/26/14 11:19:18 (10 years ago)
Author:
Mathieu Morlighem
Message:

CHG: last change before testing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp

    r18476 r18545  
    3030        iomodel->FetchDataToInput(elements,BaseEnum);
    3131        iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
     32        iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
    3233        iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
    3334        iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
     
    105106
    106107        /*Intermediaries */
    107         IssmDouble  dhdt,mb,ms,dD[2],db[2],Jdet;
     108        IssmDouble  dhdt,mb,ms,D,db[2],Jdet;
    108109        IssmDouble* xyz_list = NULL;
    109110
     
    114115        ElementVector* pe    = element->NewElementVector();
    115116        IssmDouble*    basis = xNew<IssmDouble>(numnodes);
     117        IssmDouble*   dbasis = xNew<IssmDouble>(2*numnodes);
    116118
    117119        /*Retrieve all inputs and parameters*/
     
    130132                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    131133                element->NodalFunctions(basis,gauss);
     134                element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    132135
    133136                ms_input->GetInputValue(&ms,gauss);
    134137                mb_input->GetInputValue(&mb,gauss);
    135138                dhdt_input->GetInputValue(&dhdt,gauss);
     139                D_input->GetInputValue(&D,gauss);
    136140                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                                        );
    143148        }
    144149
     
    167172
    168173        /*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;
    171176        const IssmDouble Hstar = 500.;
    172177        const IssmDouble Lstar = 500.e+3;
     
    183188        Input* surface_input    = element->GetInput(SurfaceEnum);            _assert_(surface_input);
    184189        Input* B_input          = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
     190        Input* k_input          = element->GetInput(FrictionCoefficientEnum);_assert_(k_input);
    185191        IssmDouble rhog = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum);
    186192
     
    191197               
    192198                B_input->GetInputValue(&B,gauss);
     199                k_input->GetInputValue(&k,gauss);
    193200                thickness_input->GetInputValue(&h,gauss);
    194201                surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
    195202
    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);
    201208        }
    202209
Note: See TracChangeset for help on using the changeset viewer.