Page 1 of 1

Five nucleus spin system

Posted: Sat Dec 26, 2020 11:18 am
by kkngo

Hi Everyone,
I have a 5 nucleus spin system which is centered around Cobalt. When I try to run cwEPR (pepper) the run crashes because the matrix is too large. I defined my electronic properties in Orca and imported them through the intrinsic in Matlab. Orca generated the A and D matricies. Attached below is my source code for my easy spin run:

Code: Select all


Sys = orca2easyspin('Input.prop')
Sys = nucspinkeep(Sys,[1,2,3,4,5])
%Nuclei are Sb, I, I, Sb, Co in that order

disp(Sys.Nucs)
Sys.S = 3/2;
Sys.lwpp = [0 0.65];    % mT


Exp.mwFreq = 9.353;      % GHz

Exp.Range = [150 500];  % mT

Exp.CrystalOrientation = [0 0 0];

Opt.Method = 'hybrid';
Opt.HybridCoreNuclei = [5];

Opt.nKnots = [51 0];
Opt.Sparse = true;


pepper(Sys,Exp, Opt);

I have tried reducing both number for nKnots and turned on sparse matrices. I am a little stuck on how to run this system because of the large matrices.

I am running Matlab on a 28 core socket with 192GB/s of ram on a linux system.
Easyspin version: 6.0.0-dev.27

I am receiving the following error:

Code: Select all

Error using full
Requested 41472x41472 (12.8GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may take a long
time and cause MATLAB to become unresponsive.

The system I am using allows for the use of distributed computing toolbox, but not parallel computing.


Re: Five nucleus spin system

Posted: Mon Dec 28, 2020 12:39 pm
by Stefan Stoll

Please post a self-contained example script that we can reproduce this.


Re: Five nucleus spin system

Posted: Fri Jan 22, 2021 1:01 pm
by kkngo

Hi Dr. Stoll,
Sorry it took so long, but I had to make sure I had all the permissions set before sharing this code.

Code: Select all

clear;
%Sys = orca2easyspin('Input.prop');
%Sys = nucspinkeep(Sys,[1,2,3,4,5])
Sys.Nucs = 'I,Sb,Sb,I,Co';
Sys.D = [-4.897778336925471e+04,5.766235547677643e+03,6.827539994337564e+04];
Sys.DFrame = [-2.792456420739788,1.740248025194408,-2.609481327513327];
Sys.A = [-0.364997432727752,-1.10701735662493,1.46189811729952;-0.654759772474870,-0.679309783869525,2.50913416847102;-0.698874349503253,-0.719472460370598,2.44576996966903;-0.441451302490090,-0.981277312118734,1.40563979971354;30.7435981184228,98.4571117336887,119.803800917054]
Sys.AFrame = [-1.97233397373891,0.119450489648948,0.00234999405190207;1.19613637162092,1.47249933217764,-0.900702887819311;1.01775412704994,1.17608107170947,-3.02010789001976;0.179723575422524,1.06005264995437,1.09298799017839;-1.29162763251515,0.573905407762491,0.977169203807762];
Sys.g =[2.078216296016597,2.085474940362497,2.092198713033703];
Sys.gFrame = [-0.806093806693224,2.499919918323644,0.423957574457957];
Sys.xyz = [0.0966660804754963,-0.997724894907766,2.63521553296251;1.92960119949163,1.07585669529209,-0.244640841203378;-1.90000820934606,-0.494761232433709,-0.895784804406327;1.40772247692453,-2.88737942420290,-1.11895216550408;0.368416971812227,-0.818883064028050,0.0478363602353050];

disp(Sys.Nucs)
Sys.S = 3/2;
Sys.lwpp = [0 0.65];    % mT

Exp.mwFreq = 9.353;      % GHz
Exp.Range = [0 500];  % mT
%Exp.Range = [50 40000];  % mT
%Exp.CrystalOrientation = [0 0 0];
%Exp.Temperature = 10; % temperature in kelvin

%Opt.Method = 'perturb2';
Opt.Method = 'hybrid';
Opt.HybridCoreNuclei = [5];
%Opt.nKnots = [61 0];
Opt.nKnots = [11 0];
Opt.Sparse = true;
Opt.Verbosity=1;

pepper(Sys,Exp,Opt);

%pepper(Sys,Exp, Opt);

I keep running into memory issues due to large matrices. Are there further steps I can take to reduce run times?


Re: Five nucleus spin system

Posted: Mon Jan 25, 2021 9:14 am
by Matt Krzyaniak

Stefan might have a better fix however just a couple things to note:
Your Hilbert space is rather large so it isn't surprising you're running into memory issues.
hsdim(Sys)

ans =

41472

However, looking at your spin system, you could probably trim the down quite a bit. Your antimony and Iodine have rather small hyperfine interactions and I would be surprised if you could actually resolve them in a CW-EPR spectrum, unless you're looking at a single crystal. The HFI is ~ 2 MHz which would correspond to a splitting of ~ 0.07 mT and something that is likely to be swallowed up in the spectral linewidth. So by removing those your Hilbert space drops to size 32, and no more memory problems.

A good practice is to specify the nuclear isotopes rather than just the nucleus. The only good time to leave them general is in cases like antimony where the stable isotopes are relatively evenly split.


Re: Five nucleus spin system

Posted: Mon Jan 25, 2021 12:45 pm
by Stefan Stoll

I agree with Matt that from your spin system definition it looks the I and Sb splittings might not be resolved, particularly since you are using Sys.lwpp = [0 0.65], which is about 20 MHz and quite a bit larger than the 1-2 MHz hyperfine couplings. Then leaving Sb and I out is the best option.

If you do see these splittings experimentally, consider using hybrid mode with Opt.Method = 'hybrid'. This will simulate the electron spin using matrix diagonalization, and all the nuclei using perturbation theory.


Re: Five nucleus spin system

Posted: Wed Feb 03, 2021 1:03 am
by YanQing

From the perspective of A, the first four magnetic core splittings can be completely ignored. (Even if you work hard to figure it out, the X-band will be completely buried by the splittings of Co) .It is a simple mononuclear Co compound. So I deleted the calculation parameter items other than -Co and got the approximate EPR spectrum of this compound.

code:

clear;

Sys.Nucs = 'Co';
Sys.D = [-4.89+04,5.766+03,6.827+04];
Sys.DFrame = [-2.792,1.74,-2.609];
Sys.A = [30.74,98.45,119.8];
Sys.AFrame = [-1.29,0.5739,0.977];
Sys.g =[2.078,2.085,2.092];
Sys.gFrame = [-0.80,2.49,0.42];
Sys.xyz = [0.368,-0.8188,0.0478];

disp(Sys.Nucs)
Sys.S = 3/2;
Sys.lwpp = 1;

Exp.mwFreq = 9.353;
Exp.Range = [250 360];

%Opt.Method = 'perturb2';
% Opt.Method = 'hybrid';
Opt.HybridCoreNuclei = [5];
%Opt.nKnots = [61 0];
Opt.nKnots = [11 0];
Opt.Sparse = true;
Opt.Verbosity=1;

pepper(Sys,Exp,Opt);