ECHARM_crystal_SiGe::ECHARM_crystal_SiGe(int vMillerPl[3],int vMillerAx[3],double vGeConcentration = 0.0) { std::vector<double> vSiExperimentalCoefficients; vSiExperimentalCoefficients.clear(); vSiExperimentalCoefficients.push_back(4.94976/14.); vSiExperimentalCoefficients.push_back(3.25403/14.); vSiExperimentalCoefficients.push_back(2.84957/14.); vSiExperimentalCoefficients.push_back(1.66053/14.); vSiExperimentalCoefficients.push_back(1.22949/14.); vSiExperimentalCoefficients.push_back(0.05611/14.); vSiExperimentalCoefficients.push_back(2.70254E-20); vSiExperimentalCoefficients.push_back(34.45314E-20); vSiExperimentalCoefficients.push_back(1.24059E-20); vSiExperimentalCoefficients.push_back(0.07201E-20); vSiExperimentalCoefficients.push_back(84.53648E-20); vSiExperimentalCoefficients.push_back(56.34208E-20); ECHARM_atom *atomSi = new ECHARM_atom("Si",14.,28.086 * amu,640.,450.,173.,2,vSiExperimentalCoefficients); atomSi->SetThermalVibrationConstant(0.075E-10); std::vector<double> vGeExperimentalCoefficients; vGeExperimentalCoefficients.clear(); vGeExperimentalCoefficients.push_back(9.56335/32.); vGeExperimentalCoefficients.push_back(7.86994/32.); vGeExperimentalCoefficients.push_back(7.64215/32.); vGeExperimentalCoefficients.push_back(3.31296/32.); vGeExperimentalCoefficients.push_back(2.13351/32.); vGeExperimentalCoefficients.push_back(1.47704/32.); vGeExperimentalCoefficients.push_back(2.21494E-20); vGeExperimentalCoefficients.push_back(0.14284E-20); vGeExperimentalCoefficients.push_back(3.86490E-20); vGeExperimentalCoefficients.push_back(32.69417E-20); vGeExperimentalCoefficients.push_back(8.94286E-20); vGeExperimentalCoefficients.push_back(82.15827E-20); ECHARM_atom *atomGe = new ECHARM_atom("Ge",32.,72.61 * amu,360.0,450.,350.0,2,vGeExperimentalCoefficients); atomGe->SetThermalVibrationConstant(0.085E-10); ECHARM_lattice *lattice = new ECHARM_lattice("diamond"); ECHARM_miller *miller = new ECHARM_miller(vMillerPl,vMillerAx); ECHARM_cell *cell = new ECHARM_cell(5.6575E-10,5.6575E-10,5.6575E-10); SetCell(cell); SetMiller(miller); AddBase(atomSi,lattice,1.0 - vGeConcentration); AddBase(atomGe,lattice,vGeConcentration); ComputeCrystalAverageParameters(); SetAtomName("SiGe"); }
ECHARM_crystal_Ge::ECHARM_crystal_Ge(int vMillerPl[3],int vMillerAx[3]) { std::vector<double> vGeExperimentalCoefficients; vGeExperimentalCoefficients.clear(); vGeExperimentalCoefficients.push_back(9.56335/32.); vGeExperimentalCoefficients.push_back(7.86994/32.); vGeExperimentalCoefficients.push_back(7.64215/32.); vGeExperimentalCoefficients.push_back(3.31296/32.); vGeExperimentalCoefficients.push_back(2.13351/32.); vGeExperimentalCoefficients.push_back(1.47704/32.); vGeExperimentalCoefficients.push_back(2.21494E-20); vGeExperimentalCoefficients.push_back(0.14284E-20); vGeExperimentalCoefficients.push_back(3.86490E-20); vGeExperimentalCoefficients.push_back(32.69417E-20); vGeExperimentalCoefficients.push_back(8.94286E-20); vGeExperimentalCoefficients.push_back(82.15827E-20); ECHARM_atom *atom = new ECHARM_atom("Ge",32.,72.61 * amu,360.0,450.,350.0,2,vGeExperimentalCoefficients); ECHARM_lattice *lattice = new ECHARM_lattice("diamond"); ECHARM_miller *miller = new ECHARM_miller(vMillerPl,vMillerAx); ECHARM_cell *cell = new ECHARM_cell(5.6575E-10,5.6575E-10,5.6575E-10); SetCell(cell); SetMiller(miller); AddBase(atom,lattice); ComputeCrystalAverageParameters(); }
ECHARM_crystal_interpolation::ECHARM_crystal_interpolation(ECHARM_crystal *crystal,bool bCalculateAxial) { InitializePointersCrystalInterpolation(); SetCell(crystal->GetCell()); SetMiller(crystal->GetMiller()); for(unsigned int i=0;i<crystal->GetNumberOfBases();i++) AddBase(crystal->GetAtom(i),crystal->GetLattice(i)); ComputeCrystalAverageParameters(); fIntegrationStepNumberPlanar = crystal->GetIntegrationStepNumberPlanar(); fIntegrationStepNumberAxialX = crystal->GetIntegrationStepNumberAxialX(); fIntegrationStepNumberAxialY = crystal->GetIntegrationStepNumberAxialY(); SetElectricCharacteristicPlanar(crystal->FindPlanarElectricCharacteristic(0),0); SetElectricCharacteristicPlanar(crystal->FindPlanarElectricCharacteristic(1),1); SetElectricCharacteristicPlanar(crystal->FindPlanarElectricCharacteristic(2),2); SetElectricCharacteristicPlanar(crystal->FindPlanarElectricCharacteristic(3),3); if(bCalculateAxial){ SetElectricCharacteristicAxial(crystal->FindAxialElectricCharacteristic(0),0); SetElectricCharacteristicAxial(crystal->FindAxialElectricCharacteristic(1),1); SetElectricCharacteristicAxial(crystal->FindAxialElectricCharacteristic(2),2); SetElectricCharacteristicAxial(crystal->FindAxialElectricCharacteristic(3),3); SetElectricCharacteristicAxial(crystal->FindAxialElectricCharacteristic(4),4); } }
ECHARM_crystal_interpolation::ECHARM_crystal_interpolation(ECHARM_cell *cell, ECHARM_miller *miller, ECHARM_atom *atom, ECHARM_lattice *lattice) { InitializePointersCrystalInterpolation(); SetCell(cell); SetMiller(miller); AddBase(atom,lattice); }
static bool AInherit( dr_handle inh, int index, void *_d ) /********************************************************/ { //TODO: Need to track virtual base as not to visit same place twice type_wlk_wlk *d = _d; bool cont; dr_handle btype; dr_handle old_inh; imp_sym_handle *is; dr_dbg_handle saved; walk_result wr; index = index; cont = TRUE; btype = DRGetTypeAT( inh ); btype = DRSkipTypeChain( btype ); /* skip modifiers and typedefs */ if( DRGetVirtuality( inh ) == DR_VIRTUALITY_VIRTUAL ) { if( !AddBase( btype, &d->com.vbase ) ) { return( cont ); } } is = d->is; SetSymHandle( (type_wlk *)d, is ); is->sym = inh; is->sclass = SYM_MEM; // treat inherit like a var saved = DRGetDebug(); wr = d->wk( d->com.ii, SWI_INHERIT_START, is, d->com.d ); DRSetDebug( saved ); if( wr == WR_CONTINUE ) { old_inh = d->com.inh; d->com.inh = inh; DRWalkStruct( btype, StrucWlk, d ); d->com.inh = old_inh; saved = DRGetDebug(); d->wk( d->com.ii, SWI_INHERIT_END, NULL, d->com.d ); DRSetDebug( saved ); if( d->wr != WR_CONTINUE ) { cont = FALSE; } } return( cont ); }
ECHARM_crystal_interpolation::ECHARM_crystal_interpolation(ECHARM_crystal_interpolation *crystal) { InitializePointersCrystalInterpolation(); SetCell(crystal->GetCell()); SetMiller(crystal->GetMiller()); for(unsigned int i=0;i<crystal->GetNumberOfBases();i++) AddBase(crystal->GetAtom(i),crystal->GetLattice(i)); ComputeCrystalAverageParameters(); SetElectricCharacteristicPlanar(crystal->GetPlanarElectricCharacteristicVector(0),0); SetElectricCharacteristicPlanar(crystal->GetPlanarElectricCharacteristicVector(1),1); SetElectricCharacteristicPlanar(crystal->GetPlanarElectricCharacteristicVector(2),2); SetElectricCharacteristicPlanar(crystal->GetPlanarElectricCharacteristicVector(3),3); SetElectricCharacteristicAxial(crystal->GetAxialElectricCharacteristicVector(0),0); SetElectricCharacteristicAxial(crystal->GetAxialElectricCharacteristicVector(1),1); SetElectricCharacteristicAxial(crystal->GetAxialElectricCharacteristicVector(2),2); SetElectricCharacteristicAxial(crystal->GetAxialElectricCharacteristicVector(3),3); SetElectricCharacteristicAxial(crystal->GetAxialElectricCharacteristicVector(4),4); }
static bool AInheritLookup( dr_handle inh, int index, void *_d ) /**************************************************************/ //Push inherit handle and search { type_wlk_lookup *d = _d; dr_handle btype; dr_handle old_inh; index = index; btype = DRGetTypeAT( inh ); btype = DRSkipTypeChain( btype ); /* skip modifiers and typedefs */ if( DRGetVirtuality( inh ) == DR_VIRTUALITY_VIRTUAL ) { if( !AddBase( btype, &d->com.vbase ) ) { return( TRUE ); } } old_inh = d->com.inh; d->com.inh = inh; DRWalkStruct( btype, StrucWlkLookup, d ); d->com.inh = old_inh; return( TRUE ); }
ECHARM_crystal_Ge::ECHARM_crystal_Ge(){ SetAtomName("Ge"); double vGeExperimentalCoefficients[12]; vGeExperimentalCoefficients[0] = (9.56335/32.); vGeExperimentalCoefficients[1] = (7.86994/32.); vGeExperimentalCoefficients[2] = (7.64215/32.); vGeExperimentalCoefficients[3] = (3.31296/32.); vGeExperimentalCoefficients[4] = (2.13351/32.); vGeExperimentalCoefficients[5] = (1.47704/32.); vGeExperimentalCoefficients[6] = (2.21494*AA*AA); vGeExperimentalCoefficients[7] = (0.14284*AA*AA); vGeExperimentalCoefficients[8] = (3.86490*AA*AA); vGeExperimentalCoefficients[9] = (32.69417*AA*AA); vGeExperimentalCoefficients[10] = (8.94286*AA*AA); vGeExperimentalCoefficients[11] = (82.15827*AA*AA); ECHARM_atom_xray *atom = new ECHARM_atom_xray("Ge",32.,72.61 * amu,360.0,350.0,vGeExperimentalCoefficients); ECHARM_lattice_diamond *lattice = new ECHARM_lattice_diamond(); AddBase(atom,lattice); int vMillerX[3] = {2,-2,0}; int vMillerY[3] = {1,1,-2}; int vMillerZ[3] = {1,1,1}; fMiller = new ECHARM_miller_cubic(vMillerX,vMillerY); fMiller->SetX(vMillerX); fMiller->SetY(vMillerY); fMiller->SetZ(vMillerZ); fCell = new ECHARM_cell(5.6575*AA,5.6575*AA,5.6575*AA); ComputeParameters(); }
ECHARM_crystal_InSb::ECHARM_crystal_InSb(){ SetAtomName("InSb"); //http://harker.chem.buffalo.edu/group/fit.html double vSbExperimentalCoefficients[12]; vSbExperimentalCoefficients[0] = 19.04077/51.; vSbExperimentalCoefficients[1] = 13.05412/51.; vSbExperimentalCoefficients[2] = 6.63670/51.; vSbExperimentalCoefficients[3] = 4.95963/51.; vSbExperimentalCoefficients[4] = 4.60941/51.; vSbExperimentalCoefficients[5] = 2.69795/51.; vSbExperimentalCoefficients[6] = 0.46176*AA*AA; vSbExperimentalCoefficients[7] = 5.31900*AA*AA; vSbExperimentalCoefficients[8] = 5.31953*AA*AA; vSbExperimentalCoefficients[9] = 28.54198*AA*AA; vSbExperimentalCoefficients[10] = 0.00010*AA*AA; vSbExperimentalCoefficients[11] = 72.65174*AA*AA; double vInExperimentalCoefficients[12]; vInExperimentalCoefficients[0] = 19.16300/49.; vInExperimentalCoefficients[1] = 18.59170/49.; vInExperimentalCoefficients[2] = 4.95237/49.; vInExperimentalCoefficients[3] = 4.27994/49.; vInExperimentalCoefficients[4] = 2.00969/49.; vInExperimentalCoefficients[5] = 0.00010/49.; vInExperimentalCoefficients[6] = 0.54868*AA*AA; vInExperimentalCoefficients[7] = 6.39500*AA*AA; vInExperimentalCoefficients[8] = 0.00010*AA*AA; vInExperimentalCoefficients[9] = 26.18224*AA*AA; vInExperimentalCoefficients[10] = 93.70112*AA*AA; vInExperimentalCoefficients[11] = 8.23922*AA*AA; ECHARM_atom_xray *atomIn = new ECHARM_atom_xray("In",49.,114.818 * amu,160.,481.,vInExperimentalCoefficients); ECHARM_atom_xray *atomSb = new ECHARM_atom_xray("Sb",51.,121.76 * amu,160.,472.,vSbExperimentalCoefficients); ECHARM_lattice *latticeIn = new ECHARM_lattice_zincblend_a(); ECHARM_lattice *latticeSb = new ECHARM_lattice_zincblend_b(); AddBase(atomIn,latticeIn); AddBase(atomSb,latticeSb); fCell = new ECHARM_cell(6.479*AA,6.479*AA,6.479*AA,90.,90.,90.); int vMillerX[3] = {1,0,0}; int vMillerY[3] = {0,1,0}; int vMillerZ[3] = {0,0,1}; fMiller = new ECHARM_miller_cubic(vMillerX,vMillerY); fMiller->SetX(vMillerX); fMiller->SetY(vMillerY); fMiller->SetZ(vMillerZ); ComputeParameters(); }
ECHARM_crystal_Al2O3::ECHARM_crystal_Al2O3(){ SetAtomName("Al2O3"); ECHARM_atom_moliere *atomAl = new ECHARM_atom_moliere("Al",13.,26.981539 * amu,980.0,145.2); ECHARM_atom_moliere *atomO = new ECHARM_atom_moliere("O",8.,15.9994 * amu,980.0,145.2); ECHARM_lattice *latticeAl = new ECHARM_lattice(); ECHARM_lattice *latticeO = new ECHARM_lattice(); latticeAl->Add(0.0,0.0,0.352); latticeAl->Add(0.0,0.0,0.148); latticeAl->Add(0.0,0.0,0.648); latticeAl->Add(0.0,0.0,0.852); latticeAl->Add(0.500005,0.166665,0.68533); latticeAl->Add(0.500005,0.166665,0.48133); latticeAl->Add(0.500005,0.166665,0.98133); latticeAl->Add(0.500005,0.166665,0.18533); latticeAl->Add(1.0,0.333335,0.01867); latticeAl->Add(1.0,0.333335,0.81467); latticeAl->Add(1.0,0.333335,0.31467); latticeAl->Add(1.0,0.333335,0.51867); latticeAl->Add(0.0,0.666665,0.68533); latticeAl->Add(0.0,0.666665,0.48133); latticeAl->Add(0.0,0.666665,0.98133); latticeAl->Add(0.0,0.666665,0.18533); latticeAl->Add(0.5,0.5,0.352); latticeAl->Add(0.5,0.5,0.148); latticeAl->Add(0.5,0.5,0.648); latticeAl->Add(0.5,0.5,0.852); latticeAl->Add(0.499995,0.833335,0.01867); latticeAl->Add(0.499995,0.833335,0.81467); latticeAl->Add(0.499995,0.833335,0.31467); latticeAl->Add(0.499995,0.833335,0.51867); latticeO->Add(0.3063,0.0,0.25); latticeO->Add(0.34685,0.34685,0.25); latticeO->Add(0.6937,0.0,0.75); latticeO->Add(0.15315,0.15315,0.75); latticeO->Add(0.806305,0.166665,0.58333); latticeO->Add(0.346855,0.319815,0.58333); latticeO->Add(0.346855,0.013515,0.58333); latticeO->Add(0.193705,0.166665,0.08333); latticeO->Add(0.653155,0.013515,0.08333); latticeO->Add(0.653155,0.319815,0.08333); latticeO->Add(0.306295,0.333335,0.91667); latticeO->Add(0.153145,0.180185,0.41667); latticeO->Add(0.153145,0.486485,0.41667); latticeO->Add(0.84685,0.15315,0.25); latticeO->Add(0.65315,0.34685,0.75); latticeO->Add(0.846845,0.486485,0.91667); latticeO->Add(0.846845,0.180185,0.91667); latticeO->Add(0.693695,0.333335,0.41667); latticeO->Add(0.1937,0.5,0.75); latticeO->Add(0.306305,0.666665,0.58333); latticeO->Add(0.153155,0.513515,0.08333); latticeO->Add(0.153155,0.819815,0.08333); latticeO->Add(0.8063,0.5,0.25); latticeO->Add(0.34685,0.65315,0.25); latticeO->Add(0.84685,0.84685,0.25); latticeO->Add(0.15315,0.84685,0.75); latticeO->Add(0.65315,0.65315,0.75); latticeO->Add(0.846855,0.819815,0.58333); latticeO->Add(0.846855,0.513515,0.58333); latticeO->Add(0.693705,0.666665,0.08333); latticeO->Add(0.806295,0.833335,0.91667); latticeO->Add(0.346845,0.986485,0.91667); latticeO->Add(0.346845,0.680185,0.91667); latticeO->Add(0.193695,0.833335,0.41667); latticeO->Add(0.653145,0.680185,0.41667); latticeO->Add(0.653145,0.986485,0.41667); AddBase(atomAl,latticeAl); AddBase(atomO,latticeO); fCell = new ECHARM_cell(4.7554E-10,8.23659441031E-10,12.991E-10,90.,90.,90.); int vMillerX[3] = {1,0,0}; int vMillerY[3] = {0,1,0}; int vMillerZ[3] = {0,0,1}; fMiller = new ECHARM_miller(vMillerX,vMillerY); fMiller->SetX(vMillerX); fMiller->SetY(vMillerY); fMiller->SetZ(vMillerZ); ComputeParameters(); }