Changeset 25611


Ignore:
Timestamp:
09/29/20 11:26:14 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: working on MLHO

File:
1 edited

Legend:

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

    r25610 r25611  
    27282728        /*Fetch number of nodes and dof for this finite element*/
    27292729        int numnodes = basalelement->GetNumberOfNodes();
    2730         int numdof   = numnodes*2;
    27312730
    27322731        /*Initialize Element matrix and vectors*/
    27332732        ElementMatrix* Ke     = basalelement->NewElementMatrix(MLHOApproximationEnum);
    2734         IssmDouble*    B      = xNew<IssmDouble>(3*numdof);
    2735         IssmDouble*    Bprime = xNew<IssmDouble>(3*numdof);
    2736         IssmDouble*    D      = xNewZeroInit<IssmDouble>(3*3);
     2733        IssmDouble*    dbasis = xNew<IssmDouble>(3*numnodes);
    27372734
    27382735        /*Retrieve all inputs and parameters*/
     
    27492746
    27502747                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    2751                 this->GetBSSA(B,basalelement,2,xyz_list,gauss_base);
    2752                 this->GetBSSAprime(Bprime,basalelement,2,xyz_list,gauss_base);
     2748                basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss_base);
    27532749
    27542750                element->material->ViscosityL1L2(&viscosity,xyz_list,gauss,vx_input,vy_input,surface_input);
    27552751
    2756                 for(int i=0;i<3;i++) D[i*3+i]=2*viscosity*gauss->weight*Jdet;
    2757 
    2758                 TripleMultiply(B,3,numdof,1,
    2759                                         D,3,3,0,
    2760                                         Bprime,3,numdof,0,
    2761                                         &Ke->values[0],1);
     2752                for(int i=0;i<numnodes;i++){
     2753                        for(int j=0;j<numnodes;j++){
     2754                                Ke->values[2*i*2*numnodes+2*j] += gauss->weight*Jdet*viscosity*(
     2755                                                        4.*dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
     2756                                                        );
     2757                                Ke->values[2*i*2*numnodes+2*j+1] += gauss->weight*Jdet*viscosity*(
     2758                                                        2.*dbasis[1*numnodes+j]*dbasis[0*numnodes+i] + dbasis[0*numnodes+j]*dbasis[1*numnodes+i]
     2759                                                        );
     2760                                Ke->values[(2*i+1)*2*numnodes+2*j] += gauss->weight*Jdet*viscosity*(
     2761                                                        2.*dbasis[0*numnodes+j]*dbasis[1*numnodes+i] + dbasis[1*numnodes+j]*dbasis[0*numnodes+i]
     2762                                                        );
     2763                                Ke->values[(2*i+1)*2*numnodes+2*j+1] += gauss->weight*Jdet*viscosity*(
     2764                                                        dbasis[0*numnodes+j]*dbasis[0*numnodes+i] + 4.*dbasis[1*numnodes+j]*dbasis[1*numnodes+i]
     2765                                                        );
     2766                        }
     2767                }
    27622768        }
    27632769
     
    27702776        basalelement->DeleteMaterials(); delete basalelement;
    27712777        xDelete<IssmDouble>(xyz_list);
    2772         xDelete<IssmDouble>(D);
    2773         xDelete<IssmDouble>(Bprime);
    2774         xDelete<IssmDouble>(B);
     2778        xDelete<IssmDouble>(dbasis);
    27752779        return Ke;
    27762780}/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.