What is the best way to define the below 2D fish function in FLAC 3D that loops over all zones calculates Vs based on the vertical effective stress?

loop i (1,izones)

loop j (1,jzones)

if model(i,j) # 1

$sigv = -syy(i,j) - pp(i,j)

Vs = Vs1 * sqrt($sigv/2116)^n

shear_mod(i,j) = Vs^2 * density(i,j)

end_if

end_loop

end_loop

Something like this:

[global Vs1 = 500]

[global n = 0.25]

fish operator input_shear(z)

local pp = zone.pp(z)

local sigv = - zone.stress(z)->zz - pp

local Vs = Vs1 * (sigv/2116)^n

zone.prop(z,“shear”) = Vs^2 * zone.density(z)

end

[input_shear(::zone.list)])

Please check and make necessary modification for your model.

Thank you for your response, @cheng. The provided code worked perfectly and the shear modulus vary in z direction. I have a follow-up question: after assigning the shear modulus using the code you provided, I would like to create a function that allows me to vary the shear modulus in both the x and y directions across the model. This is to assess the differential settlement resulting from a reduction in stiffness. I would greatly appreciate any guidance on how to iterate through zones within a single layer and update the shear modulus. In FLAC2D I would probably use something like below if it works:

loop $i (1,izones)

loop $j (1,jzones)

IF z_group($i,$j) = ‘Sand’ THEN

ex_1 ($i,$j) = z_prop($i,$j, ‘shear’)

z_prop($i,$j, ‘shear’) = ex_1 ($i,$j) * (linear reduction function!)

end_if

end_loop

end_loop

Something like:

fish operator adj_shear(z)

if zone.isgroup(z,“Sand”)

zone.prop(z,“shear”) *= 0.5

endif

end

[adj_shear(::zone.list)])