Skip to content

Making a 1-way spin wave packet #309

Open
@dovod91

Description

@dovod91

Dear Team,

Thank you again for the software and your support.

I am struggling to code a 1-way spin wave packet for my simulations.
The pulse should be in the form:

sin(w t - k x) = sin(k x) sin(w t) + cos(k x) cos(w t) [1]

Therefore, it is my understanding that I should end up adding an energy term in the system in the form of:

system.energy += mm.Zeeman(H=H, func=func, dt=dt_)

where H is my 'spatial' field profile, and 'func' can be my time-dependent field, together making the final expression for the field.
So far, and by checking with the API, my current code looks like this:

# Field in space:
def field_1_sin_spat(point):
    x, y, z = point

    k_0 = 0.175*2*3.14*1e6 # 0.175 rad/um
    sr2_x = 5*10e-9
    
    c_k = 0.1*k_0
    a_1 = 1/(2*(c_k)**2)
    t_0 = 1e-10

    Amp = 80e0
    gauss_x = np.exp( -((x+sr2_x)**2) / (4*a_1) )

    field_1 = (Amp*np.sin(k_0 * x)*gauss_x, 0, 0)

    return (Amp*np.sin(k_0 * x)*gauss_x, 0, 0)

# Field in space:
def field_2_cos_spat(point):
    x, y, z = point

    k_0 = 0.175*2*3.14*1e6 # 0.175 rad/um
    sr2_x = 5*10e-9
    
    c_k = 0.1*k_0
    a_1 = 1/(2*(c_k)**2)
    t_0 = 1e-10

    Amp = 80e0
    gauss_x = np.exp( -((x+sr2_x)**2) / (4*a_1) )

    field_2 = (Amp*np.cos(k_0 * x)*gauss_x, 0, 0)

    return (Amp*np.cos(k_0 * x)*gauss_x, 0, 0)

H_1_sin = df.Field(mesh, nvdim=3, value=field_1_sin_spat)
H_2_cos = df.Field(mesh, nvdim=3, value=field_2_cos_spat)

The time-dependent fields:

def field_1_sin_time(t):
    
    omega = 2*3.14*1e9 # 1 GHz
    
    c_w = 0.4*omega
    b_1 = 1/(2*(c_w)**2)
    t_0 = 2e-9

    return np.sin(omega*t)*np.exp(-((t-t_0)**2) / (4*b_1))


def field_2_cos_time(t):
   
    omega = 2*3.14*1e9 # 1 GHz
    
    c_w = 0.4*omega
    b_1 = 1/(2*(c_w)**2)
    t_0 = 2e-9

    return np.cos(omega*t)*np.exp(-((t-t_0)**2) / (4*b_1))

So the system should be:

system.energy += mm.Zeeman(H=H, func=field_1_sin_time, name='field1', dt=dt_)    # first term of [1]
system.energy += mm.Zeeman(H=H, func=field_2_cos_time, name='field2', dt=dt_)    # second term of [1]

I am not obtaining what expected: While for a certain point, the coded wave packet shows only two maxima, in the simulation there are more travelling maxima through that point:
image

image

Maybe there is an easier way to code this 1-way pulse in ubermag? Thank you so much for your suggestions.

Best regards,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions