Changeset 23968


Ignore:
Timestamp:
05/31/19 10:49:15 (6 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added moulins

Location:
issm/trunk-jpl/src/c
Files:
2 edited

Legend:

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

    r23965 r23968  
    4242                        loads->AddObject(new Channel(i+1,i,i,iomodel));
    4343                }
    44 
    45                 /*Free data: */
    46         }
     44        }
     45
     46        /*Create discrete loads for Moulins*/
     47        CreateSingleNodeToElementConnectivity(iomodel);
     48        for(int i=0;i<iomodel->numberofvertices;i++){
     49                if (iomodel->domaintype!=Domain3DEnum){
     50                        /*keep only this partition's nodes:*/
     51                        if(iomodel->my_vertices[i]){
     52                                loads->AddObject(new Moulin(i+1,i,iomodel));
     53                        }
     54                }
     55                else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
     56                        if(iomodel->my_vertices[i]){
     57                                loads->AddObject(new Moulin(i+1,i,iomodel));
     58                        }       
     59                }
     60        }
     61        iomodel->DeleteData(1,"md.mesh.vertexonbase");
    4762}/*}}}*/
    4863void HydrologyGlaDSAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/
  • issm/trunk-jpl/src/c/classes/Loads/Channel.cpp

    r23965 r23968  
    585585
    586586        /*Intermediaries */
    587         IssmDouble  Jdet,v1,qc,fFactor,Afactor,Bfactor,Xifactor;
    588         IssmDouble  A,B,n,phi_old,phi,phi_0,dPw;
     587        IssmDouble  A,B,n,phi,phi_0;
    589588        IssmDouble  H,h,b,dphi[2],dphids,dphimds,db[2],dbds;
    590589        IssmDouble  xyz_list[NUMVERTICES][3];
    591590        IssmDouble  xyz_list_tria[3][3];
    592         const int   numnodes = NUMNODES;
    593 
    594         /*Initialize Element vector and other vectors*/
    595         ElementMatrix* Ke=new ElementMatrix(this->nodes,NUMNODES,this->parameters);
    596         IssmDouble     basis[NUMNODES];
    597         IssmDouble     dbasisdx[2*NUMNODES];
    598         IssmDouble     dbasisds[NUMNODES];
    599591
    600592        /*Retrieve all inputs and parameters*/
     
    610602        IssmDouble lc        = element->FindParam(HydrologyChannelSheetWidthEnum);
    611603        IssmDouble c_t       = element->FindParam(HydrologyPressureMeltCoefficientEnum);
     604        IssmDouble dt        = element->FindParam(TimesteppingTimeStepEnum);
    612605
    613606        Input* h_input      = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
     
    628621        GaussTria* gauss=new GaussTria();
    629622        gauss->GaussEdgeCenter(index1,index2);
    630 
    631         tria->GetSegmentJacobianDeterminant(&Jdet,&xyz_list[0][0],gauss);
    632         tria->GetSegmentNodalFunctions(&basis[0],gauss,index1,index2,tria->FiniteElement());
    633         tria->GetSegmentNodalFunctionsDerivatives(&dbasisdx[0],&xyz_list_tria[0][0],gauss,index1,index2,tria->FiniteElement());
    634         dbasisds[0] = dbasisdx[0*2+0]*tx + dbasisdx[0*2+1]*ty;
    635         dbasisds[1] = dbasisdx[1*2+0]*tx + dbasisdx[1*2+1]*ty;
    636623
    637624        /*Get input values at gauss points*/
     
    655642
    656643        /*Approx. discharge in the sheet flowing folwing in the direction of the channel ofver a width lc*/
    657         qc = - Ks * dphids;
     644        IssmDouble qc = - Ks * dphids;
    658645
    659646        /*d(phi - phi_m)/ds*/
    660         dPw = dphids - dphimds;
     647        IssmDouble dPw = dphids - dphimds;
    661648
    662649        /*Compute f factor*/
    663         fFactor = 0.;
     650        IssmDouble fFactor = 0.;
    664651        if(this->S>0. || qc*dPw>0.){
    665652                fFactor = lc * qc;
    666653        }
    667654
    668         /*Compute Afactor and Bfactor*/
    669         Afactor = C_W*c_t*rho_water;
    670         Bfactor = 1./L * (1./rho_ice - 1./rho_water);
    671         if(dphids>0){
    672                 Xifactor = + Bfactor * (fabs(-Kc*dphids) + fabs(lc*qc));
    673         }
    674         else{
    675                 Xifactor = - Bfactor * (fabs(-Kc*dphids) + fabs(lc*qc));
    676         }
    677 
    678         _error_("STOP");
    679 
    680         /*Diffusive term*/
    681         for(int i=0;i<numnodes;i++){
    682                 for(int j=0;j<numnodes;j++){
    683                         /*GlaDSCoupledSolver.F90 line 1659*/
    684                         Ke->values[i*numnodes+j] += gauss->weight*Jdet*(
    685                                                 +Kc*dbasisds[i]*dbasisds[j]                               /*Diffusion term*/
    686                                                 - Afactor * Bfactor* Kc * dPw * basis[i] * dbasisds[j]    /*First part of Pi*/
    687                                                 + Afactor * fFactor * Bfactor * basis[i] * dbasisds[j]    /*Second part of Pi*/
    688                                                 + Xifactor* basis[i] * dbasisds[j]                        /*Xi term*/
    689                                                 );
    690                 }
    691         }
     655        /*Compute total discharge*/
     656        IssmDouble Q = -Kc*dphids;
     657
     658        /*Compute Pi and Xi*/
     659        IssmDouble Pi = -C_W*c_t*rho_water*(Q+fFactor)*dPw;
     660        IssmDouble Xi = fabs(Q*dphids) + fabs(lc * qc * dphids);
     661
     662        /*Compute closing rate*/
     663        A=pow(B,-n);
     664        IssmDouble vc = 2./pow(n,n)*A*this->S*pow(fabs(phi_0 - phi),n-1.)*(phi_0 - phi);
     665
     666        /*Compute new S based on Forward Euler (explicit)*/
     667        this->S = this->S + dt*( (Xi - Pi)/(rho_ice*L) - vc);
     668        if(this->S<0); this->S = 0.;
    692669
    693670        /*Clean up and return*/
Note: See TracChangeset for help on using the changeset viewer.