Hello all, new user here. I would like to kindly ask for advice on how to obtain the total surface area of all the joints in my 3DEC model.
Thank you in advance.
Hello all, new user here. I would like to kindly ask for advice on how to obtain the total surface area of all the joints in my 3DEC model.
Thank you in advance.
Hi!
The area of contacts is held in the subcontacts.
Quoting 3DEC documentation:
The sub-contact area is obtained by assigning to the point a region formed by 1/3 of the areas of the triangular faces containing the sub-contact and lying on the c-p. The area of the intersection of this region with the other block’s faces lying on the c-p is then calculated.
For face-to-face contact, [the area] is taken as one-half of this area, in order to account for the fact that the sub-contacts are established for vertices of both blocks, therefore resulting in two sets of parallel “springs.”
So, for getting the total area, you simply have to loop over all subcontacts in the model and sum up their areas:
Using Fish:
fish define joints_total_area
local area
loop foreach local subcontact block.subcontact.list()
area += block.subcontact.area(subcontact)
end_loop
joints_total_area = area
end
Finally, A Python alternative would be:
def joints_total_area():
return sum([subcontact.area() for subcontact in it.block.subcontact.list()])
Bonus!
If you like the Pyhon-style one-liner solution but want to stick to Fish, you can take advantage of Fish splitting formulation:
fish define joints_total_area_split
joints_total_area_split = list.sum(block.subcontact.area(::block.subcontact.list))
Cheers!
Theophile
Thanks Theophile, really appreciate it!
I’ll give it a try
Hi @Theophile
Can I please ask for your advice?
I’ve tried the FISH code on a simple UCS specimen with a saw-cut joint through the centre.
However, the I’m getting the area value of 0. Here is my script below and I am using 3DEC 7.0
Many thanks once again, I really appreciate your help!
model new
block create drum center-1 = 0 0 0 center-2 = 0 0 10.5 edges = 50 radius-1 = 2.1 radius-2 = 2.1
; Assign joint through centre
block cut joint-set dip 0 dip-direction 90 origin 0 0 5.25
block zone generate edgelength 0.5
model save ‘UCS geometry’
fish define joints_total_area
local area
loop foreach local subcontact block.subcontact.list()
area += block.subcontact.area(subcontact)
end_loop
joints_total_area = area
end
Hi, @FauzanYudho !
I am truly sorry I missed your post (plus, I was on holidays).
You might have solved your issue since.
Just in case: when running your code, and calling [joints_total_area]
, I get a correct value corresponding to the expected area of a 2.1 m disk (~13.8 m²).
Cheers!
Theophile
Hi @Theophile ,
Thank you for your reply! Thankfully I noticed what was missing not long after I replied to your comment
Anyway, I really appreciated your help as it meant a lot in helping the work I am doing as a PhD student starting to learn 3DEC from scratch.
All the best!
Fauzan