Skip to content

Commit 5e8fcbb

Browse files
committed
Replaced string option for interpolation in diffusion with class enum
1 parent 62a2174 commit 5e8fcbb

8 files changed

+80
-33
lines changed

source/CompositionDiffusionStrategy.h

+20
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,20 @@
77

88
using namespace SAMRAI;
99

10+
enum class DiffusionInterpolationType
11+
{
12+
LINEAR,
13+
PBG,
14+
UNDEFINED
15+
};
16+
1017
class CompositionDiffusionStrategy
1118
{
1219
public:
20+
CompositionDiffusionStrategy(DiffusionInterpolationType interp_func_type)
21+
: d_interp_func_type(interp_func_type)
22+
{};
23+
1324
/*
1425
* compute actual diffusion by weighting diffusion in each phase
1526
* using phase variable
@@ -20,6 +31,15 @@ class CompositionDiffusionStrategy
2031
const int phase_id,
2132
const int eta_id)=0;
2233

34+
protected:
35+
char interpChar()const
36+
{
37+
return ((d_interp_func_type
38+
==DiffusionInterpolationType::LINEAR) ? 'l' : 'p');
39+
}
40+
41+
private:
42+
DiffusionInterpolationType d_interp_func_type;
2343
};
2444

2545
#endif

source/DiffusionForConcInPhaseStrategy.C

+13-17
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ DiffusionForConcInPhaseStrategy::DiffusionForConcInPhaseStrategy(
6161
const int diffusion_coeff_a_id,
6262
const int diffusion_coeff_b_id,
6363
const std::string& avg_func_type,
64-
const std::string& diff_interp_func_type,
64+
DiffusionInterpolationType diff_interp_type,
6565
CompositionStrategyMobilities* mobilities_strategy,
6666
FreeEnergyStrategy* free_energy_strategy):
67+
CompositionDiffusionStrategy(diff_interp_type),
6768
d_mobilities_strategy(mobilities_strategy),
6869
d_free_energy_strategy(free_energy_strategy)
6970
{
@@ -82,7 +83,6 @@ DiffusionForConcInPhaseStrategy::DiffusionForConcInPhaseStrategy(
8283
d_diffusion_coeff_b_id=diffusion_coeff_b_id;
8384

8485
d_avg_func_type=avg_func_type;
85-
d_diff_interp_func_type=diff_interp_func_type;
8686

8787
d_with_third_phase = ( conc_b_scratch_id>=0 );
8888

@@ -464,10 +464,8 @@ void DiffusionForConcInPhaseStrategy::setDiffCoeffInEachPhaseOnPatch(
464464

465465
if( d_with_third_phase && d_same_composition_for_third_phase )
466466
{
467-
double heta =
468-
FORT_INTERP_FUNC( eta, d_diff_interp_func_type.c_str() );
469467
for(unsigned short ic=0;ic<d_ncompositions;ic++){
470-
c_s[ic] = (1.-heta)*c_a[ic]+heta*c_b[ic];
468+
c_s[ic] = (1.-eta)*c_a[ic]+eta*c_b[ic];
471469
}
472470
computeLocalDiffusionMatrixA(temp, c_s);
473471
for(int ic=0;ic<nc2;ic++){
@@ -536,10 +534,8 @@ void DiffusionForConcInPhaseStrategy::setDiffCoeffInEachPhaseOnPatch(
536534

537535
if( d_with_third_phase && d_same_composition_for_third_phase )
538536
{
539-
double heta =
540-
FORT_INTERP_FUNC( eta, d_diff_interp_func_type.c_str() );
541537
for(unsigned short ic=0;ic<d_ncompositions;ic++){
542-
c_s[ic] = (1.-heta)*c_a[ic]+heta*c_b[ic];
538+
c_s[ic] = (1.-eta)*c_a[ic]+eta*c_b[ic];
543539
}
544540

545541
computeLocalDiffusionMatrixA(temp, c_s);
@@ -611,10 +607,8 @@ void DiffusionForConcInPhaseStrategy::setDiffCoeffInEachPhaseOnPatch(
611607

612608
if( d_with_third_phase && d_same_composition_for_third_phase )
613609
{
614-
double heta =
615-
FORT_INTERP_FUNC( eta, d_diff_interp_func_type.c_str() );
616610
for(unsigned short ic=0;ic<d_ncompositions;ic++){
617-
c_s[ic] = (1.-heta)*c_a[ic]+heta*c_b[ic];
611+
c_s[ic] = (1.-eta)*c_a[ic]+eta*c_b[ic];
618612
}
619613

620614
computeLocalDiffusionMatrixA(temp, c_s);
@@ -782,6 +776,8 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
782776
kmin = pbox.lower(2);
783777
kmax = pbox.upper(2);
784778
#endif
779+
780+
const char interp_func = interpChar();
785781

786782
// X-side
787783
for ( int kk = kmin; kk <= kmax; kk++ ) {
@@ -800,7 +796,7 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
800796
double hphi =
801797
FORT_INTERP_FUNC(
802798
phi,
803-
d_diff_interp_func_type.c_str() );
799+
&interp_func );
804800

805801
double heta = 0.0;
806802
if ( d_with_third_phase ) {
@@ -809,7 +805,7 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
809805
heta =
810806
FORT_INTERP_FUNC(
811807
eta,
812-
d_diff_interp_func_type.c_str() );
808+
&interp_func );
813809
}
814810

815811
for(unsigned int ic=0;ic<nc2;ic++){
@@ -844,7 +840,7 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
844840
double hphi =
845841
FORT_INTERP_FUNC(
846842
phi,
847-
d_diff_interp_func_type.c_str() );
843+
&interp_func );
848844

849845
double heta = 0.0;
850846
if ( d_with_third_phase ) {
@@ -853,7 +849,7 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
853849
heta =
854850
FORT_INTERP_FUNC(
855851
eta,
856-
d_diff_interp_func_type.c_str() );
852+
&interp_func );
857853
}
858854

859855
for(unsigned int ic=0;ic<nc2;ic++){
@@ -889,7 +885,7 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
889885
double hphi =
890886
FORT_INTERP_FUNC(
891887
phi,
892-
d_diff_interp_func_type.c_str() );
888+
&interp_func );
893889

894890
double heta = 0.0;
895891
if ( d_with_third_phase ) {
@@ -898,7 +894,7 @@ void DiffusionForConcInPhaseStrategy::setDiffOnPatch(
898894
heta =
899895
FORT_INTERP_FUNC(
900896
eta,
901-
d_diff_interp_func_type.c_str() );
897+
&interp_func );
902898
}
903899

904900
for(unsigned int ic=0;ic<nc2;ic++){

source/DiffusionForConcInPhaseStrategy.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class DiffusionForConcInPhaseStrategy
6363
const int diffusion_coeff_a_id,
6464
const int diffusion_coeff_b_id,
6565
const std::string& avg_func_type,
66-
const std::string& diff_interp_func_type,
66+
DiffusionInterpolationType diff_interp_type,
6767
CompositionStrategyMobilities* mobilities_strategy,
6868
FreeEnergyStrategy* free_energy_strategy);
6969

@@ -154,8 +154,6 @@ class DiffusionForConcInPhaseStrategy
154154

155155
bool d_with_third_phase;
156156

157-
std::string d_diff_interp_func_type;
158-
159157
CompositionStrategyMobilities* d_mobilities_strategy;
160158

161159
// free energy needed to compute diffusion in each phase

source/QuatModel.C

+2-2
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ void QuatModel::initializeCompositionRHSStrategy(
346346
d_model_parameters.Q0_liquid(),
347347
d_model_parameters.Q0_solid_A(),
348348
d_model_parameters.Q0_solid_B(),
349-
d_model_parameters.diffusion_interp_func_type(),
349+
d_model_parameters.energy_interp_func_type(),
350350
d_model_parameters.avg_func_type() );
351351
}else if ( d_model_parameters.concRHSstrategyIsEBS() ){
352352

@@ -382,7 +382,7 @@ void QuatModel::initializeCompositionRHSStrategy(
382382
d_conc_phase_coupling_diffusion_id,
383383
d_model_parameters.D_liquid(),
384384
d_model_parameters.D_solid_A(),
385-
d_model_parameters.diffusion_interp_func_type(),
385+
d_model_parameters.conc_interp_func_type(),
386386
d_model_parameters.avg_func_type() );
387387
}else{
388388
TBOX_ERROR( "Error: unknown composition RHS Strategy" );

source/QuatModelParameters.C

+20-3
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ QuatModelParameters::QuatModelParameters()
101101
d_orient_interp_func_type = "";
102102
d_conc_interp_func_type = "";
103103
d_energy_interp_func_type = "";
104-
d_diffusion_interp_func_type = "";
104+
d_diffusion_interp_type =
105+
DiffusionInterpolationType::UNDEFINED;
105106
d_eta_well_func_type = "";
106107
d_eta_interp_func_type = "";
107108
d_eta_well_func_type = "";
@@ -829,9 +830,25 @@ void QuatModelParameters::readModelParameters(boost::shared_ptr<tbox::Database>
829830
d_conc_interp_func_type =
830831
model_db->getStringWithDefault( "conc_interp_func_type",
831832
d_energy_interp_func_type );
832-
d_diffusion_interp_func_type =
833+
string diffusion_interp_type =
833834
model_db->getStringWithDefault( "diffusion_interp_func_type",
834-
d_energy_interp_func_type );
835+
"linear" );
836+
switch( diffusion_interp_type[0] ){
837+
case 'l':
838+
case 'L':
839+
d_diffusion_interp_type =
840+
DiffusionInterpolationType::LINEAR;
841+
break;
842+
case 'p':
843+
case 'P':
844+
d_diffusion_interp_type =
845+
DiffusionInterpolationType::PBG;
846+
break;
847+
default:
848+
tbox::plog<<"diffusion_interp_type="
849+
<<diffusion_interp_type<<endl;
850+
TBOX_ERROR( "Error: invalid diffusion_interp_type!!!");
851+
}
835852

836853
// Currently "arithmetic" or "harmonic"
837854
// arithmetic: (x1+x2)/2

source/QuatModelParameters.h

+18-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#define included_QuatModelParameters
3535

3636
#include "tools.h"
37+
#include "CompositionDiffusionStrategy.h"
3738

3839
// Headers for basic SAMRAI objects
3940
#include "SAMRAI/tbox/MemoryDatabase.h"
@@ -173,8 +174,9 @@ class QuatModelParameters
173174
return d_energy_interp_func_type;
174175
}
175176
std::string eta_interp_func_type()const{ return d_eta_interp_func_type; }
176-
std::string diffusion_interp_func_type()const{
177-
return d_diffusion_interp_func_type;
177+
DiffusionInterpolationType
178+
diffusion_interp_func_type()const{
179+
return d_diffusion_interp_type;
178180
}
179181

180182
std::string avg_func_type()const{ return d_avg_func_type; }
@@ -401,10 +403,23 @@ class QuatModelParameters
401403
* "3" for cubic, phi^3
402404
*/
403405
std::string d_orient_interp_func_type;
406+
407+
/*!
408+
* form of h_r(phi)
409+
*/
404410
std::string d_conc_interp_func_type;
411+
412+
/*!
413+
* form of h_p(phi)
414+
*/
405415
std::string d_energy_interp_func_type;
416+
406417
std::string d_eta_interp_func_type;
407-
std::string d_diffusion_interp_func_type;
418+
419+
/*!
420+
* form of h_d(phi)
421+
*/
422+
DiffusionInterpolationType d_diffusion_interp_type;
408423

409424
std::string d_avg_func_type;
410425
std::string d_diffq_avg_func_type;

source/TbasedCompositionDiffusionStrategy.C

+5-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ TbasedCompositionDiffusionStrategy::TbasedCompositionDiffusionStrategy(
1212
const int diffusion_a_id,
1313
const double D_liquid, const double Q0_liquid,
1414
const double D_solid_A, const double Q0_solid_A,
15-
const string& phase_interp_func_type,
15+
const DiffusionInterpolationType interp_func_type,
1616
const string& avg_func_type):
17+
CompositionDiffusionStrategy(interp_func_type),
1718
d_diffusion_l_id(diffusion_l_id),
1819
d_diffusion_a_id(diffusion_a_id),
1920
d_D_liquid(D_liquid),
2021
d_Q0_liquid(Q0_liquid),
2122
d_D_solid_A(D_solid_A),
2223
d_Q0_solid_A(Q0_solid_A),
23-
d_phase_interp_func_type(phase_interp_func_type),
2424
d_avg_func_type(avg_func_type)
2525
{
2626
assert( D_liquid >= 0. );
@@ -45,6 +45,8 @@ void TbasedCompositionDiffusionStrategy::setDiffusion(
4545

4646
const int maxl = hierarchy->getNumberOfLevels();
4747

48+
const char interp_func_type = interpChar();
49+
4850
for ( int amr_level = 0; amr_level < maxl; amr_level++ ) {
4951
boost::shared_ptr<hier::PatchLevel > level =
5052
hierarchy->getPatchLevel( amr_level );
@@ -102,7 +104,7 @@ void TbasedCompositionDiffusionStrategy::setDiffusion(
102104
d_D_liquid, d_Q0_liquid,
103105
d_D_solid_A, d_Q0_solid_A,
104106
gas_constant_R_JpKpmol,
105-
d_phase_interp_func_type.c_str(),
107+
&interp_func_type,
106108
d_avg_func_type.c_str());
107109

108110
//fill other diagonal value with same value for ternaries for now

source/TbasedCompositionDiffusionStrategy.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class TbasedCompositionDiffusionStrategy :
1717
const int diffusion_a_id,
1818
const double D_liquid, const double Q0_liquid,
1919
const double D_solid_A, const double Q0_solid_A,
20-
const string& phase_interp_func_type,
20+
DiffusionInterpolationType interp_func_type,
2121
const string& avg_func_type
2222
);
2323

@@ -46,7 +46,6 @@ class TbasedCompositionDiffusionStrategy :
4646
double d_D_solid_A;
4747
double d_Q0_solid_A;
4848

49-
std::string d_phase_interp_func_type;
5049
std::string d_avg_func_type;
5150
};
5251

0 commit comments

Comments
 (0)