Module: Ferroelectric#

Semi-implicit thin film solver for second order differential equations of form:

\[ \frac{\eta}{\Delta t} - G_{ij} \eta_{,ij}= rhs \]

Defined Types#

type_mupro_FerroelectricContext#

Variables

Variable

Type

Dimension

Meaning

stiffness

real64

(6,6)

Elastic stiffness

electrostrictive

real64

(6,6)

Electrostrictive tensor

eigenstrain

real64,pointer

(6,z,y,x)

Eigenstrain

elast

real64,pointer

(3,z,y,x)

Elastic driving force

elec

real64,pointer

(3,z,y,x)

Electric driving force

lan

real64,pointer

(3,z,y,x)

Landau driving force

op

real64,pointer

(3,z,y,x)

Order parameter

boundCharge

real64,pointer

(3,z,y,x)

Bound charge

landau_energy

real64,pointer

(3,z,y,x)

Landau energy

grad_energy

real64,pointer

(3,z,y,x)

gradient energy

a1,a2,a3

real64

-

Landau coefficient

a11,a22,a33

real64

-

Landau coefficient

a23,a13,a12

real64

-

Landau coefficient

a111,a112,a123

real64

-

Landau coefficient

a1111,a1112,a1122,a1123

real64

-

Landau coefficient

type_mupro_inhomoFerroelectricContext#

Variables

Variable

Type

Dimension

Meaning

stiffness

real64

(6,6)

Elastic stiffness

electrostrictive

real64

(6,6)

Electrostrictive tensor

eigenstrain

real64,pointer

(6,z,y,x)

Eigenstrain

elast

real64,pointer

(3,z,y,x)

Elastic driving force

elec

real64,pointer

(3,z,y,x)

Electric driving force

lan

real64,pointer

(3,z,y,x)

Landau driving force

op

real64,pointer

(3,z,y,x)

Order parameter

boundCharge

real64,pointer

(3,z,y,x)

Bound charge

landau_energy

real64,pointer

(3,z,y,x)

Landau energy

grad_energy

real64,pointer

(3,z,y,x)

gradient energy

a1,a2,a3

real64,pointer

-

Landau coefficient

a11,a22,a33

real64,pointer

-

Landau coefficient

a23,a13,a12

real64,pointer

-

Landau coefficient

a111,a112,a123

real64,pointer

-

Landau coefficient

a1111,a1112,a1122,a1123

real64,pointer

These two types inherit from type_ferroelectricBase

Procedures#

  • setup

  • get_gradient_energy

  • get_polarization_bound_charge

  • get_eigenstrain

  • get_elastic_driving_force

  • get_landau_driving_force

  • get_gradient_driving_force

All the above subroutines have a parameter of type type_FerroelectricBase, which can be converted to types type_mupro_FerroelectricContext and type_mupro_inhomoFerroelectricContext as needed

Argument

Type(Intent)

context

type(type_FerroelectricBase), intent(inout) :: context