44
55#include < unordered_map>
66
7- #define FLOAT_CAST (dest, x ) dest.x = static_cast <float >(x);
8-
97namespace viennaps {
108
119template <typename NumericType> struct PlasmaEtchingParameters {
@@ -148,61 +146,53 @@ template <typename NumericType> struct PlasmaEtchingParameters {
148146
149147 return processData;
150148 }
149+ };
151150
152- PlasmaEtchingParameters<float > convertToFloat () const {
153- PlasmaEtchingParameters<float > pParams;
154- if constexpr (std::is_same_v<NumericType, float >) {
155- pParams = *this ;
156- } else {
157- FLOAT_CAST (pParams, ionFlux);
158- FLOAT_CAST (pParams, etchantFlux);
159- FLOAT_CAST (pParams, passivationFlux);
160-
161- for (auto &pair : beta_E) {
162- pParams.beta_E [pair.first ] = static_cast <float >(pair.second );
163- }
164- for (auto &pair : beta_P) {
165- pParams.beta_P [pair.first ] = static_cast <float >(pair.second );
166- }
167-
168- FLOAT_CAST (pParams, etchStopDepth);
169-
170- FLOAT_CAST (pParams, Mask.A_sp );
171- FLOAT_CAST (pParams, Mask.B_sp );
172- FLOAT_CAST (pParams, Mask.Eth_sp );
173- FLOAT_CAST (pParams, Mask.rho );
174-
175- FLOAT_CAST (pParams, Polymer.A_sp );
176- FLOAT_CAST (pParams, Polymer.B_sp );
177- FLOAT_CAST (pParams, Polymer.Eth_sp );
178- FLOAT_CAST (pParams, Polymer.rho );
179-
180- FLOAT_CAST (pParams, Substrate.A_ie );
181- FLOAT_CAST (pParams, Substrate.A_sp );
182- FLOAT_CAST (pParams, Substrate.B_ie );
183- FLOAT_CAST (pParams, Substrate.B_sp );
184- FLOAT_CAST (pParams, Substrate.Eth_ie );
185- FLOAT_CAST (pParams, Substrate.Eth_sp );
186- FLOAT_CAST (pParams, Substrate.k_sigma );
187- FLOAT_CAST (pParams, Substrate.beta_sigma );
188- FLOAT_CAST (pParams, Substrate.rho );
189-
190- FLOAT_CAST (pParams, Passivation.A_ie );
191- FLOAT_CAST (pParams, Passivation.Eth_ie );
192-
193- FLOAT_CAST (pParams, Ions.exponent );
194- FLOAT_CAST (pParams, Ions.meanEnergy );
195- FLOAT_CAST (pParams, Ions.sigmaEnergy );
196- FLOAT_CAST (pParams, Ions.inflectAngle );
197- FLOAT_CAST (pParams, Ions.n_l );
198- FLOAT_CAST (pParams, Ions.minAngle );
199- FLOAT_CAST (pParams, Ions.thetaRMin );
200- FLOAT_CAST (pParams, Ions.thetaRMax );
201- }
202- return pParams;
151+ #ifdef VIENNACORE_COMPILE_GPU
152+ struct PlasmaEtchingParametersGPU {
153+ PlasmaEtchingParametersGPU () = default ;
154+ template <typename NumericType>
155+ PlasmaEtchingParametersGPU (
156+ const PlasmaEtchingParameters<NumericType> ¶meters) {
157+ Mask.A_sp = static_cast <float >(parameters.Mask .A_sp );
158+ Mask.B_sp = static_cast <float >(parameters.Mask .B_sp );
159+ Mask.Eth_sp = static_cast <float >(parameters.Mask .Eth_sp );
160+ Mask.rho = static_cast <float >(parameters.Mask .rho );
161+
162+ Polymer.A_sp = static_cast <float >(parameters.Polymer .A_sp );
163+ Polymer.B_sp = static_cast <float >(parameters.Polymer .B_sp );
164+ Polymer.Eth_sp = static_cast <float >(parameters.Polymer .Eth_sp );
165+ Polymer.rho = static_cast <float >(parameters.Polymer .rho );
166+
167+ Substrate.rho = static_cast <float >(parameters.Substrate .rho );
168+ Substrate.Eth_sp = static_cast <float >(parameters.Substrate .Eth_sp );
169+ Substrate.Eth_ie = static_cast <float >(parameters.Substrate .Eth_ie );
170+ Substrate.A_sp = static_cast <float >(parameters.Substrate .A_sp );
171+ Substrate.B_sp = static_cast <float >(parameters.Substrate .B_sp );
172+ Substrate.A_ie = static_cast <float >(parameters.Substrate .A_ie );
173+ Substrate.B_ie = static_cast <float >(parameters.Substrate .B_ie );
174+ Substrate.k_sigma = static_cast <float >(parameters.Substrate .k_sigma );
175+ Substrate.beta_sigma = static_cast <float >(parameters.Substrate .beta_sigma );
176+
177+ Passivation.Eth_ie = static_cast <float >(parameters.Passivation .Eth_ie );
178+ Passivation.A_ie = static_cast <float >(parameters.Passivation .A_ie );
179+
180+ Ions.meanEnergy = static_cast <float >(parameters.Ions .meanEnergy );
181+ Ions.sigmaEnergy = static_cast <float >(parameters.Ions .sigmaEnergy );
182+ Ions.exponent = static_cast <float >(parameters.Ions .exponent );
183+ Ions.inflectAngle = static_cast <float >(parameters.Ions .inflectAngle );
184+ Ions.n_l = static_cast <float >(parameters.Ions .n_l );
185+ Ions.minAngle = static_cast <float >(parameters.Ions .minAngle );
186+ Ions.thetaRMin = static_cast <float >(parameters.Ions .thetaRMin );
187+ Ions.thetaRMax = static_cast <float >(parameters.Ions .thetaRMax );
203188 }
189+
190+ PlasmaEtchingParameters<float >::MaskType Mask;
191+ PlasmaEtchingParameters<float >::PolymerType Polymer;
192+ PlasmaEtchingParameters<float >::MaterialType Substrate;
193+ PlasmaEtchingParameters<float >::PassivationType Passivation;
194+ PlasmaEtchingParameters<float >::IonType Ions;
204195};
196+ #endif
205197
206198} // namespace viennaps
207-
208- #undef FLOAT_CAST
0 commit comments