Changeset 18041


Ignore:
Timestamp:
05/22/14 08:17:51 (11 years ago)
Author:
cborstad
Message:

CHG: damagelaw is now an integer to facilitate switching between different laws

File:
1 edited

Legend:

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

    r18034 r18041  
    3232
    3333        /*Retrieve law dependent parameters: */
    34         char* law  = NULL;
     34        int law;
    3535        iomodel->Constant(&law,DamageLawEnum);
    36         if (strcmp(law,"pralong")==0){
     36        if (law>0){
    3737                parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
    3838                parameters->AddObject(iomodel->CopyConstantObject(DamageC2Enum));
     
    4343                parameters->AddObject(iomodel->CopyConstantObject(DamageEquivStressEnum));
    4444        }
    45         xDelete<char>(law);
    4645
    4746}/*}}}*/
     
    445444        IssmDouble J2s,Chi,Psi,PosPsi,NegPsi;
    446445        IssmDouble damage,tau_xx,tau_xy,tau_yy;
    447         int equivstress,domaintype;
     446        int equivstress,domaintype,damagelaw;
    448447
    449448        /*Fetch number of vertices and allocate output*/
     
    458457        element->FindParam(&stress_threshold,DamageStressThresholdEnum);
    459458        element->FindParam(&domaintype,DomainTypeEnum);
     459        element->FindParam(&damagelaw,DamageLawEnum);
    460460
    461461        /*Compute stress tensor: */
     
    504504                }
    505505                Psi=Chi-stress_threshold;
    506                 PosPsi=max(Psi,0.);
    507506                NegPsi=max(-Chi,0.); /* healing only for compressive stresses */
    508507
    509                 f[i]= c1*(pow(PosPsi,c2) - healing*pow(NegPsi,c2))*pow((1.-damage),-c3);
     508                if(damagelaw==1){
     509                        PosPsi=max(Psi,0.);
     510                        f[i]= c1*(pow(PosPsi,c2) - healing*pow(NegPsi,c2))*pow((1./(1.-damage)),c3);
     511                }
     512                else if(damagelaw==2){
     513                        PosPsi=max(Psi,1.);
     514                        f[i]= c1*(pow(log10(PosPsi),c2) - healing*pow(NegPsi,c2))*pow((1./(1.-damage)),c3);
     515                }
     516                else _error_("damage law not supported");
    510517        }
    511518
Note: See TracChangeset for help on using the changeset viewer.