Clamped Pockels tensor of AlAs#

In this tutorial you will learn how to calculate the clamped Pockels tensor using aiida-vibroscopy.

For the demonstration, we will make use of AlAs, a non-centrosymmetric semiconductor material.

Note

You can find more detailed information about the clamped Pockels tensor calculation, its implementation in aiida-vibroscopy, and a practical example on the tetragonal phase of barium titanate in our paper de Mestral, V. et al. Phys. Rev. B 111, 184306 (2025).

Let’s get started!

Pockels tensor formalism#

The Pockels effect in a linear electro-optic effect relating an external electric field \(\mathcal{E}_k\) modulation to a change in refractive index \(n_{ij}\) in a non-centrosymmetric material. The Pockels tensor \(r_{ijk}\) is defined within the formalism of the index ellipsoid as

(1)#\[\begin{equation} \Delta \Bigg(\frac{1}{n_{ij}^2} \Bigg) = \sum_{k=1}^3 r_{ijk} \mathcal{E}_k \end{equation}\]

where indices \(i\), \(j\), and \(k\) represent the polarizations (in a Cartesian basis) of the incoming optical field, the outgoing optical field, and the modulating electrical field, respectively.

The Pockels tensor is a function of electric field, atomic positions, and lattice strains. aiida-vibroscopy computes the clamped contribution to \(r_{ijk}\) only, thus neglecting the lattice strains contributions. This approximation is valid for electric field modulations that exceed lattice resonance frequencies. In such case, \(r_{ijk}\) can be written as \(r_{ijk}^{el} + r_{ijk}^{ion}\), i.e., a high-frequency (electronic) and a phonon contribution (ionic)

(2)#\[\begin{equation} r_{ijk}^{el} + r_{ijk}^{ion} = -\frac{2}{n_{ii}^2 n_{jj}^2} \chi_{ijk}^{(2)} - \frac{1}{n_{ii}^2 n_{jj}^2} \sum_m \frac{\alpha_{ij}^m p_{m,k}}{\omega_m^2} \end{equation}\]

where \(\chi_{ijk}^{(2)}\) is the DC-field second-order dielectric susceptibility. The \(\alpha_{ij}^m\) variable is the Raman susceptibility tensor associated with phonon mode \(m\). It is calculated as

(3)#\[\begin{equation} \alpha_{ij}^m = \sum_{\kappa, \beta} \frac{\partial \chi_{ij}^{(1)}}{\partial \tau_{\kappa, \beta}} u_m(\kappa, \beta) \end{equation}\]

where \(\frac{\partial \chi_{ij}^{(1)}}{\partial \tau_{\kappa, \beta}}\) is the Raman tensor introduced in the tutorial on vibrational spectra and \(u_m(\kappa, \beta)\) is the eigenvector associated with atom \(\kappa\) and polarization direction \(\beta\). The mode polarity \(p_{m, k}\) is calculated as

(4)#\[\begin{equation} p_{m,k} = \sum_{\kappa, \beta} Z_{\kappa, k \beta}^* u_m(\kappa, \beta) \end{equation}\]

with the Born effective charges \(Z_{\kappa, k \beta}^*\) introduced in the tutorial on dielectric tensor calculations.

Note

The Pockels formalism was originally developed in the late 60s, however its implementation in aiida-vibroscopy is based on the successive work of Veithen et al.. See:

  • Johnston Jr, W.D., Phys. Rev. B, 1.8, 3494 (1970)

  • Veithen, M., Xavier Gonze, and Ph Ghosez, Phys. Rev. B, 71.12, 125107 (2005)

Attention! The non-analytical constants (NAC) should be accounted for whenever polar materials are investigated (refer to the tutorial on phonon and dielectric properties of AlAs).

Hide code cell content

from local_module import load_temp_profile

# If you download this file, you can run it with your own profile.
# Put these lines instead:
# from aiida import load_profile
# load_profile()
data = load_temp_profile(
    name="clamped-pockels-tutorial",
    add_computer=True,
    add_pw_code=True,
    add_sssp=True,
)
Report: downloading patch versions information... 
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:46: AiidaDeprecationWarning: The `Code` class is deprecated. To create an instance, use the `aiida.orm.nodes.data.code.installed.InstalledCode` or `aiida.orm.nodes.data.code.portable.PortableCode` for a "remote" or "local" code, respectively. If you are using this class to compare type, e.g. in `isinstance`, use `aiida.orm.nodes.data.code.abstract.AbstractCode`. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:58: AiidaDeprecationWarning: The `Code` plugin is deprecated, use the `InstalledCode` (`core.code.remote`) instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:493: AiidaDeprecationWarning: `Code.set_remote_computer_exec` method is deprecated, use `InstalledCode`. (this will be removed in v3)
  warn_deprecation('`Code.set_remote_computer_exec` method is deprecated, use `InstalledCode`.', version=3)
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:406: AiidaDeprecationWarning: `Code.set_input_plugin_name` method is deprecated, use the `default_calc_job_plugin` property instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:386: AiidaDeprecationWarning: `Code.set_prepend_text` method is deprecated, use the `prepend_text` property instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
 [OK]
Report: downloading selected pseudopotentials archive...  [OK]
Report: downloading selected pseudopotentials metadata...  [OK]

Importing the structure from COD#

Let’s import the AlAs structure from the COD database via AiiDA.

from struct import Struct
from aiida.plugins import DbImporterFactory
from aiida.plugins import DataFactory

CodDbImporter = DbImporterFactory('cod')

cod = CodDbImporter()
results = cod.query(id='1540257') # AlAs 1540257
structure = results[0].get_aiida_structure() # it has 8 atoms
/opt/conda/lib/python3.9/site-packages/aiida/plugins/entry_point.py:338: AiidaDeprecationWarning: The entry point `cod` is deprecated. Please replace it with `core.cod`. (this will be removed in v3)
  warn_deprecation(f'The entry point `{name}` is deprecated. Please replace it with `core.{name}`.', version=3)
/opt/conda/lib/python3.9/site-packages/aiida/tools/data/cif.py:134: FutureWarning: get_structures is deprecated
get_structures is deprecated and will be removed in 2024. Use parse_structures instead.The only difference is that primitive defaults to False in the new parse_structures method.So parse_structures(primitive=True) is equivalent to the old behavior of get_structures().
  structures = parser.get_structures(**parameters)

Running the IRamanSpectraWorkChain#

Let’s import the WorkChain and run it!

As usual, we use the get_builder_from_protocol to get a prefilled builder with all inputs. These inputs should be considered not as converged parameters, but as a good starting point. You may also need to tweak some parameters, e.g. add magnetization etc., depending on your case.

from aiida.plugins import WorkflowFactory
from aiida.engine import run_get_node
from aiida_quantumespresso.common.types import ElectronicType

# NOTE: it is the same workflow as for computing IR and Raman spectra!
PockelsWorkChain = WorkflowFactory("vibroscopy.spectra.iraman")

# To make the calculations run faster
scf_overrides = {'scf':{'pw':{'parameters':{'SYSTEM':{'ecutwfc':30, 'ecutrho':30*8}}}}}

builder = PockelsWorkChain.get_builder_from_protocol(
    code=data.pw_code,
    structure=structure,
    protocol="fast",
    overrides={'dielectric':scf_overrides, 'phonon':scf_overrides},
    kwargs={'electronic_type' :ElectronicType.INSULATOR},
)

results, calc = run_get_node(builder)

Hide code cell output

03/06/2025 09:40:24 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [124|IRamanSpectraWorkChain|run_spectra]: submitting `HarmonicWorkChain` <PK=126>
03/06/2025 09:40:24 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [126|HarmonicWorkChain|run_phonon]: submitting `PhononWorkChain` <PK=129>
03/06/2025 09:40:25 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [126|HarmonicWorkChain|run_dielectric]: submitting `DielectricWorkChain` <PK=130>
03/06/2025 09:40:26 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_base_scf]: launching base scf PwBaseWorkChain<143>
03/06/2025 09:40:26 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [143|PwBaseWorkChain|run_process]: launching PwCalculation<146> iteration #1
03/06/2025 09:40:27 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [129|PhononWorkChain|run_base_supercell]: launching base supercell scf PwBaseWorkChain<152>
03/06/2025 09:40:27 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [152|PwBaseWorkChain|run_process]: launching PwCalculation<155> iteration #1
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
03/06/2025 09:40:39 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [143|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:40:39 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [143|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:40:40 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [152|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:40:40 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [152|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:40:40 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_nscf]: launching base scf PwBaseWorkChain<168>
03/06/2025 09:40:41 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [168|PwBaseWorkChain|run_process]: launching PwCalculation<171> iteration #1
03/06/2025 09:40:41 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [129|PhononWorkChain|run_forces]: submitting `PwBaseWorkChain` <PK=176> with supercell n.o 1
03/06/2025 09:40:43 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [129|PhononWorkChain|run_forces]: submitting `PwBaseWorkChain` <PK=178> with supercell n.o 2
03/06/2025 09:40:44 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [176|PwBaseWorkChain|run_process]: launching PwCalculation<181> iteration #1
03/06/2025 09:40:44 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [178|PwBaseWorkChain|run_process]: launching PwCalculation<184> iteration #1
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
03/06/2025 09:41:03 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [168|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:04 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [168|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:41:05 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_null_field_scfs]: launching PwBaseWorkChain<200> with null electric field 0
03/06/2025 09:41:05 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_null_field_scfs]: launching PwBaseWorkChain<201> with null electric field 1
03/06/2025 09:41:06 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [200|PwBaseWorkChain|run_process]: launching PwCalculation<204> iteration #1
03/06/2025 09:41:06 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [201|PwBaseWorkChain|run_process]: launching PwCalculation<207> iteration #1
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
03/06/2025 09:41:09 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [176|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:10 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [176|PwBaseWorkChain|on_terminated]: cleaned remote folders of calculations: 181
03/06/2025 09:41:10 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [178|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:10 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [178|PwBaseWorkChain|on_terminated]: cleaned remote folders of calculations: 184
03/06/2025 09:41:12 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [129|PhononWorkChain|on_terminated]: cleaned remote folders of calculations: 155 181 184
03/06/2025 09:41:29 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [200|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:29 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [200|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:41:31 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [201|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:32 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [201|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:41:33 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_electric_field_scfs]: launching PwBaseWorkChain<231> with electric field index 2 and sign 1.0 iteration #0
03/06/2025 09:41:34 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_electric_field_scfs]: launching PwBaseWorkChain<234> with electric field index 3 and sign 1.0 iteration #0
03/06/2025 09:41:35 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [231|PwBaseWorkChain|run_process]: launching PwCalculation<237> iteration #1
03/06/2025 09:41:35 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [234|PwBaseWorkChain|run_process]: launching PwCalculation<240> iteration #1
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
03/06/2025 09:41:59 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [231|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:59 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [231|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:41:59 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [234|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:41:59 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [234|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:42:00 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_electric_field_scfs]: launching PwBaseWorkChain<253> with electric field index 2 and sign 1.0 iteration #1
03/06/2025 09:42:01 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_electric_field_scfs]: launching PwBaseWorkChain<256> with electric field index 3 and sign 1.0 iteration #1
03/06/2025 09:42:03 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [253|PwBaseWorkChain|run_process]: launching PwCalculation<259> iteration #1
03/06/2025 09:42:03 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [256|PwBaseWorkChain|run_process]: launching PwCalculation<262> iteration #1
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:523: AiidaDeprecationWarning: `Code.get_remote_computer` method is deprecated, use the `computer` attribute instead. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:565: AiidaDeprecationWarning: `Code.is_local` method is deprecated, use a `PortableCode` instance and check the type. (this will be removed in v3)
  warn_deprecation(
/opt/conda/lib/python3.9/site-packages/aiida/orm/nodes/data/code/legacy.py:513: AiidaDeprecationWarning: `Code.get_remote_exec_path` method is deprecated, use `InstalledCode.filepath_executable` instead. (this will be removed in v3)
  warn_deprecation(
03/06/2025 09:42:25 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [253|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:42:25 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [253|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:42:27 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [256|PwBaseWorkChain|results]: work chain completed after 1 iterations
03/06/2025 09:42:28 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [256|PwBaseWorkChain|on_terminated]: remote folders will not be cleaned
03/06/2025 09:42:29 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|run_numerical_derivatives]: launching NumericalDerivativesWorkChain<280> for computing numerical derivatives.
/aiida-plugins/aiida-vibroscopy/src/aiida_vibroscopy/calculations/symmetry.py:164: UserWarning: Symmetry of dChi/dr tensors is largely broken. 
The max difference is:
22.88281777626398
  warnings.warn('\n'.join(lines))
/aiida-plugins/aiida-vibroscopy/src/aiida_vibroscopy/calculations/symmetry.py:164: UserWarning: Symmetry of dChi/dr tensors is largely broken. 
The max difference is:
94.61659485017016
  warnings.warn('\n'.join(lines))
/aiida-plugins/aiida-vibroscopy/src/aiida_vibroscopy/calculations/symmetry.py:164: UserWarning: Symmetry of dChi/dr tensors is largely broken. 
The max difference is:
118.52785387480554
  warnings.warn('\n'.join(lines))
03/06/2025 09:42:32 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [130|DielectricWorkChain|on_terminated]: cleaned remote folders of calculations: 146 171 204 207 237 240 259 262
03/06/2025 09:42:35 AM <15160> aiida.orm.nodes.process.workflow.workchain.WorkChainNode: [REPORT] [126|HarmonicWorkChain|on_terminated]: cleaned remote folders of calculations: 155 181 184 146 171 204 207 237 240 259 262

Calculating the clamped Pockels tensor#

Let’s print the clamped Pockels tensor r_tot, its electronic contribution r_el, and its ionic contribution r_ion.

vibro = calc.outputs.vibrational_data.numerical_accuracy_4
r_tot, r_el, r_ion = vibro.run_clamped_pockels_tensor()
print('Clamped Pockels tensor (r_tot) of AlAs in pm/V: \n', r_tot.round(2), '\n')
print('Electronic contribution to r_tot in pm/V: \n', r_el.round(2), '\n')
print('Ionic contribution to r_tot in pm/V: \n', r_ion.round(2), '\n')
Clamped Pockels tensor (r_tot) of AlAs in pm/V: 
 [[[ 0.    0.   -0.  ]
  [-0.    0.   -0.75]
  [-0.   -0.75 -0.  ]]

 [[-0.    0.   -0.75]
  [-0.   -0.    0.  ]
  [-0.75  0.   -0.  ]]

 [[-0.   -0.75 -0.  ]
  [-0.75  0.   -0.  ]
  [-0.   -0.   -0.  ]]] 

Electronic contribution to r_tot in pm/V: 
 [[[-0.   -0.   -0.  ]
  [-0.   -0.   -1.22]
  [-0.   -1.22 -0.  ]]

 [[-0.   -0.   -1.22]
  [-0.    0.    0.  ]
  [-1.22  0.   -0.  ]]

 [[-0.   -1.22 -0.  ]
  [-1.22  0.   -0.  ]
  [-0.   -0.   -0.  ]]] 

Ionic contribution to r_tot in pm/V: 
 [[[ 0.    0.    0.  ]
  [-0.    0.    0.47]
  [ 0.    0.47  0.  ]]

 [[-0.    0.    0.47]
  [ 0.   -0.   -0.  ]
  [ 0.47  0.    0.  ]]

 [[ 0.    0.47  0.  ]
  [ 0.47  0.    0.  ]
  [ 0.    0.    0.  ]]] 

Due to symmetry (AlAs belongs to space group number 216), we obtain \(-0.75\) pm/V for each \(r_{123} = r_{132} = r_{213} = r_{231} = r_{321} = r_{312}\) clamped Pockels coefficient. This value is very small and of negligible interest for practical opto-electronic applications - hence the lack of available experimental data, as far as we know. We chose AlAs for the sake of running this tutorial within a reasonable amount of time. However, once you get the hang of it, you can go on and study more relevant materials.

Warning

In the literature, it is common to refer to Pockels coefficients using the Voigt notation, where the first two indices are contracted as follows: \(11 \rightarrow 1\), \(22 \rightarrow 2\), \(33 \rightarrow 3\), \(23 = 32 \rightarrow 4\), \(31 = 13 \rightarrow 5\), and \(12 = 21 \rightarrow 6\). For AlAs for instance, \(r_{123} = r_{63}\), \(r_{132} = r_{52}\), …