amrex-microelectronics / ferrox Goto Github PK
View Code? Open in Web Editor NEWFerroX is a massively parallel, 3D phase-field simulation framework for modeling ferroelectric materials based scalable logic devices.
FerroX is a massively parallel, 3D phase-field simulation framework for modeling ferroelectric materials based scalable logic devices.
To perform an applied voltage sweep with a given temporal profile, we need to make applied voltage a function of time.
Currently, we have input parameters inc_step
and Phi_Bc_inc
to increment the applied voltage at step = inc_step
by Phi_Bc_inc
. This gives us an option to either increase the applied voltage or decrease it (by setting Phi_Bc_inc < 0
).
This could be done with a parser function.
Parser functions would be useful in other instances, such as, defining the device geometry and specifying material properties which depend on spatial locations (x,y,z)
.
Dear @prkkumar @jackieyao0114 , how to build and run the codes FerroX?
Generalize the gradient energy terms beyond cubic lattice. Ref:
2004 LQ Chen - general gradient energy terms.pdf
The calculation of Ez from phi currently uses first order one-sided derivatives at the top and bottom electrodes.
This seems not accurate enough.
We can call the new implemented kernel Dphi/Dz
, which uses the second order derivative at the top and bottom electrodes.
In the code, this lines should be implemented:
Ez_arr(i,j,k) = - DphiDz(phi, z, z_hi, z_lo, prob_lo, prob_hi, Phi_Bc_hi, Phi_Bc_lo, i, j, k, dx);
in replacement of the current
if(z_lo < prob_lo[2]){ //Bottom Boundary
Ez_arr(i,j,k) = -(phi(i,j,k+1) - phi(i,j,k))/(dx[2]);
} else if (z_hi > prob_hi[2]){ //Top Boundary
Ez_arr(i,j,k) = -(phi(i,j,k) - phi(i,j,k-1))/(dx[2]);
} else{ //inside
Ez_arr(i,j,k) = -(phi(i,j,k+1) - phi(i,j,k-1))/(2.*dx[2]);
}
For problems containing ferroelectric, dielectric, and semiconductor layers we compute self-consistent rho and phi using an iterative scheme to achieve true first or second order accuracy. Without this scheme rho computation is done using phi at the previous time step which reduces the overall order of accuracy.
When the Dirichlet BC for Poisson solve is set to Phi_BC_lo = 0.0 and Phi_BC_hi = 1.2 to get an applied voltage of 1.2V across the MFIS stack, the iterative scheme does not converge. The error oscillates between two values rather than going down below a user specified tolerance which is set to be 1.0e-5.
The issue can be reproduced using the following script.
n_cell = 64 64 32
max_grid_size = 32
prob_type = 2
P_BC_flag_lo = 0 # Polarization BC at FE-DE interface
P_BC_flag_hi = 1 # Polarization BC at FE-Metal interface
Phi_Bc_lo = 0.0 # Dirichlet BC for Poisson solve at bottom metal contact
Phi_Bc_hi = 1.2 # Dirichlet BC for Poisson solve at top metal contact
TimeIntegratorOrder = 1
nsteps = 1
plot_int = 1
dt = 2.0e-13
prob_lo = -16.e-9 -16.e-9 0.e-9
prob_hi = 16.e-9 16.e-9 16.e-9
epsilon_0 = 8.85e-12
epsilonX_fe = 24.0
epsilonZ_fe = 24.0
epsilon_de = 3.9
epsilon_si = 11.7
alpha = -2.5e9
beta = 6.0e10
gamma = 1.5e11
BigGamma = 100
g11 = 1.0e-9
g44 = 1.0e-9
SC_lo = 0.0
SC_hi = 10.0e-9
DE_lo = 10.0e-9
DE_hi = 11.0e-9
FE_lo = 11.0e-9
FE_hi = 16.0e-9
lambda = 3.0e-9
TDGL equation is the slow-limit version of Newton's 2nd law. We should revert it back to the original Newton's with P defined as a function of displacements: https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7990241
Currently, we assume the ferroelectric to have uniaxial atomic displacement along the thickness of the film. This allows us to treat polarization as a scalar (Px = 0, Py = 0, Pz = P). In order to simulate general ferroelectrics, we would like to have non-zero Px and Py.
This can be done in the following way:
div(P) - rho
instead of 'dP/dz'Note that, we will have to pass new material parameters for Landau free energy term. We should consider renaming the parameters to alpha_*
etc instead of alpha
, beta
, and gamma
.
We can use the following paper as a reference:
https://aip.scitation.org/doi/pdf/10.1063/1.1377855
The parameters read in from parmparse should be moved into a namespace, so they don't have to be passed around as function arguments anymore and are "globally accessible" via a header file.
This is the first step of adding electron transport; later we will develop more sophisticated transport model with BTE &/ NEGF
We currently ignore the contribution of strain to the total energy density in the TDGL equation. The strain energy can be computed as a function of polarization using equation 4 and 5 in
https://aip.scitation.org/doi/pdf/10.1063/1.1377855
We can add this as follows:
Cloning into 'amrex'...
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.