Changeset 25265


Ignore:
Timestamp:
07/10/20 21:26:15 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: removing TripleMultiply

Location:
issm/trunk-jpl/src/c/analyses
Files:
3 edited

Legend:

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

    r24335 r25265  
    6262        /*Initialize Element vector and other vectors*/
    6363        ElementMatrix* Ke     = element->NewElementMatrix();
    64         IssmDouble*    B      = xNew<IssmDouble>(numnodes);
     64        IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
     65        IssmDouble*    dbasis = xNew<IssmDouble>(dim*numnodes);
    6566
    6667        /*Retrieve all inputs and parameters*/
     
    7374
    7475                element->JacobianDeterminant(&Jdet,xyz_list,gauss);
    75                 GetB(B,element,dim,xyz_list,gauss);
    76                 D=gauss->weight*Jdet*dt;
     76                element->NodalFunctions(basis,gauss);
     77                element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    7778
    7879                /*vertical diffusion*/
    79                 TripleMultiply(B,1,numnodes,1,
    80                                         &D,1,1,0,
    81                                         B,1,numnodes,0,
    82                                         &Ke->values[0],1);
     80                D=gauss->weight*Jdet*dt;
     81                for(int i=0;i<numnodes;i++){
     82                        for(int j=0;j<numnodes;j++){
     83                                Ke->values[i*numnodes+j] += D*dbasis[(dim-1)*numnodes+i]*dbasis[(dim-1)*numnodes+j];
     84                        }
     85                }
    8386
    84                 /*Next value*/
     87                /*Next value (Transient)*/
    8588                D=gauss->weight*Jdet;
    86                 element->NodalFunctions(B,gauss);
    87                 TripleMultiply(B,numnodes,1,0,
    88                                         &D,1,1,0,
    89                                         B,1,numnodes,0,
    90                                         &Ke->values[0],1);
     89                for(int i=0;i<numnodes;i++) for(int j=0;j<numnodes;j++) Ke->values[i*numnodes+j] += D*basis[j]*basis[i];
    9190        }
    9291
    9392        /*Clean up and return*/
    9493        xDelete<IssmDouble>(xyz_list);
    95         xDelete<IssmDouble>(B);
     94        xDelete<IssmDouble>(basis);
     95        xDelete<IssmDouble>(dbasis);
    9696        delete gauss;
    9797        return Ke;
     
    137137        return pe;
    138138}/*}}}*/
    139 void           DepthAverageAnalysis::GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
    140         /*      Compute B  matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];
    141                 where hi is the interpolation function for node i.*/
    142 
    143         /*Fetch number of nodes for this finite element*/
    144         int numnodes = element->GetNumberOfNodes();
    145 
    146         /*Get nodal functions derivatives*/
    147         IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes);
    148         element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    149 
    150         /*Build B: */
    151         for(int i=0;i<numnodes;i++){
    152                 B[i] = dbasis[(dim-1)*numnodes+i];
    153         }
    154 
    155         /*Clean-up*/
    156         xDelete<IssmDouble>(dbasis);
    157 }
    158 /*}}}*/
    159139void           DepthAverageAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
    160140           _error_("not implemented yet");
  • TabularUnified issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h

    r24335 r25265  
    2626                ElementMatrix* CreateKMatrix(Element* element);
    2727                ElementVector* CreatePVector(Element* element);
    28                 void           GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss);
    2928                void           GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element);
    3029                void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
  • TabularUnified issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

    r25261 r25265  
    446446                if(dt!=0.){
    447447                        D_scalar=gauss->weight*Jdet;
    448                         for(int i=0;i<numnodes;i++){
    449                                 for(int j=0;j<numnodes;j++){
    450                                         Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i];
    451                                 }
    452                         }
     448                        for(int i=0;i<numnodes;i++) for(int j=0;j<numnodes;j++) Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i];
    453449                        D_scalar=D_scalar*dt;
    454450                }
Note: See TracChangeset for help on using the changeset viewer.