Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Aaron Widera

Pages: [1] 2
WeaveGeo / Re: how do i create a larger weave
« on: October 12, 2021, 09:38:26 AM »
Hi Sarah,
you can change the size of the weaves in WeaveGeo by heading to the Domain tab and can add periodic cells of the weave in X-/Weft-Direction or Y-/Warp-Direction to the weave by chaning the Unit Cells option here.

Forum FAQs / Re: Frequently asked questions:
« on: September 29, 2021, 02:14:38 PM »
How do I use the Latex Editor?
  • You can use the Latex Editor by clicking on the fMath formatting option above the text area.
  • There are two different options:
    • One that creates formulas inline \( A = \pi r^{2} \)
    • And one that creates formulas in a new paragraph \[ A = \pi r^{2} \]
    • For latex code in a new paragraph, enter your latex code between this operators:
Code: [Select]
[latex] A = \pi r^{2}[/latex]
  • For latex code in line, enter your latex code between this two operators:
Code: [Select]
[latex=inline] A = \pi r^{2}[/latex]
  • You can create code blocks as seen above by using the code block tags:
Code: [Select]
[code] Your code here [/code ]

Forum FAQs / Re: Frequently asked questions:
« on: September 29, 2021, 02:08:26 PM »
  • How do I start a new board at the front page?
    • It is not intended to change the boards on the forums starting page. The starting page is read only.
  • How do I embedd an image into my posts?
    • You can attach your image to the post and use the [ attachimg=1] to insert the first attachment as inline attachment. To insert the second attachment use [ attachimg=2].
    • You can upload your image to a web hosting service and use the tag:
Code: [Select]

Forum FAQs / Re: Frequently asked questions:
« on: September 29, 2021, 02:04:29 PM »

Forum FAQs / Re: Frequently asked questions:
« on: September 29, 2021, 01:58:04 PM »
Where can I change my password, username, etc.?

Hi Marvin,

I prepared you an example, I assume, that youzr python script to create the roving support points is named
It should look like that:
Code: [Select]
def test_func(parameter1, parameter2):
  x = [[2e-05, 2e-05, 2e-05],[4.5e-05, 2e-05, 2e-05],[7e-05, 3e-05, 2e-05],[9.5e-05, 4e-05, 3e-05]]
  y = [[2e-05, 2e-05, 2e-05],[2e-05, 4.5e-05, 2e-05],[3e-05, 7e-05, 2e-05]]
  return [x, y]
So it is just a function "test_func" that gets two parameters. Then it calculates and get two list (x and y) with the support points. In this case the list is set, but you just need to enter you polynomial function.
Then the script returns the two lists combined as [x, y]

Now for the important part, you can copy and paste this code block into a blank python script and use it, I will use comments marked by # to comment in the script what is happening:
Code: [Select]
Header =  {
  'Release'      : '2021',

Description = '''

Variables = {
  'NumberOfVariables' : 0,
# until here it is just header and initialization which is not important

import PolyNomial    #here we import the python script

Roving_list = PolyNomial.test_func(123, 456) # by using .test_func(para1,para2) we are using the function from the script PolyNomial with the parameters para1 and para2. And save the returned values in the Roving_list

diam_1 = 2e-05      #Here you can set the Diameter of the Rovings. Here both Rovings in x and y directio have the same size. You could adapt it like below.
diam_2 = 1e-05

number_of_rovings = len(Roving_list)

#now we define a dictionary that is filled with all information GeoDict needs to create the GAD-Objects
#You might need to adjust the voxellenght and Domainsize (NX, NY, NZ) below by calculating the domainsize
GadAdd_args = {
  'ResultFileName'  : 'GadAdd.gdr',
  'KeepStructure'   : 0,
  'NumberOfObjects' : number_of_rovings,
  'Domain' : {
    'PeriodicX'         : False,
    'PeriodicY'         : False,
    'PeriodicZ'         : False,
    'OriginX'           : (0, 'm'),
    'OriginY'           : (0, 'm'),
    'OriginZ'           : (0, 'm'),
    'VoxelLength'       : (1e-06, 'm'),
    'DomainMode'        : 'VoxelNumber',   # Possible values: VoxelNumber, Length, VoxelNumberAndLength
    'NX'                : 100,
    'NY'                : 100,
    'NZ'                : 100,
    'Material' : {
      'Type'        : 'Fluid',     # Possible values: Fluid, Solid, Porous
      'Name'        : 'Undefined',
      'Information' : '',
    'OverlapMode'       : 'GivenMaterial', # Possible values: OverlapMaterial, NewMaterial, OldMaterial, GivenMaterial
    'OverlapMaterialID' : 3,
    'NumOverlapRules'   : 0,
    'HollowMaterialID'  : 0,
    'PostProcessing' : {
      'ResolveOverlap'    : False,
      'MarkContactVoxels' : False,
      'ContactMaterialID' : 15,
#This is the basic dictionary and now we fill it with the two Rovings. I Have it variable so when the polynomial script later returns more support lists, it should also work.

for i in range(number_of_rovings):
  GadAdd_args[f'Object{i+1}:MaterialID'] = 1
  GadAdd_args[f'Object{i+1}:Type'] = 'CurvedEllipticalFiber'
  GadAdd_args[f'Object{i+1}:NumberOfSegments'] = len(Roving_list[i])-1
  GadAdd_args[f'Object{i+1}:FiberEndType1'] = 'Flat'
  GadAdd_args[f'Object{i+1}:FiberEndType2'] = 'Flat'
  GadAdd_args[f'Object{i+1}:Diameter1'] = diam_1
  GadAdd_args[f'Object{i+1}:Diameter2'] = diam_2
  GadAdd_args[f'Object{i+1}:Perpendicular'] = [-1,0,0]
  #we iterate over the Roving number i and fill the Dictionary with Object1, Object2.
  #The command GadAdd_args[f'Object{i+1}:Diameter1'] = diam_1 takes the dictionary GaddAdd_args at fills it at the entry Object i :Diameter1 with the value diam1
  for j in range(len(Roving_list[i])):
    GadAdd_args[f'Object{i+1}:Point{j+1}'] =  Roving_list[i][j]
    #each support point generates a new entry in the dictionary, here we fill the dictionary with the entry from the Roving_list. Where i means whether it is Roving x or y and j means the current support point.
gd.runCmd("GadGeo:GadAdd", GadAdd_args, Header['Release'])

If you copy code block 1 into a scirpt called and code block 2 into another python script "" and then exectue the it should generate a small example.
Then you need to replace the test_func by your real polynomial function and it should still work. It is important that and are placed in the same folder.

Please let me know if you have any questions, because coding can always become a bit tricky.

You are welcome :)
By the way this is very intersting application and combination of the FoamGeo and GrainGeo modules.
Hopefully we are hearing about your work with GeoDict in one way or the other someday in the future.

Hi Evren,
sure we help you how to make such a Aerogel structure. You already are on the right track, you just need some more extra steps.

So when you have the channel structure you have to:
  • Go to Model:ProcessGeo:Invert and invert the structure.
  • Go to GrainGeo:CreateGrains and select
    • Create in Current Domain and Keep Current Objects / Structure
    • Select the option Without (Remove) Object Overlap and click Edit Here you set the Overlap SVP / (%) to 0.1
    • Set the Add Object solid Volume Percentage to a bit less than the amount of Pore in the inverted structure. So for example the inverted structure has 12% porosity, than you choose 10%
    • Finally you can set the diameter distributioin of your spheres as you need them and click on OK and Generate
  • When it is finished you are left with the Aerogel and the remains of the inverted structure. Just Reassign this material ID to Pore (ID 00) and you have only the Aerogel left

That should give you the Aerogel. Please let me briefly know if it helped or if you have any questions left?

Have a nice day,

Hi Marvin,

yes it is possible to create elliptical rovings with the support points automated by using the "Add GAD Object" option. You can use a python macro for that, the tricky question would be how to access the data form the excel sheet.

Can you tell me a bit more how the support points in the sheet are formatted?
Then I can explain you how you on that expample how to create a macro for that. So can you show a table here to show me how the data looks like? For example:
RovingsRoving 1 CoordinatesRoving 1 DiametersRoving 2 CoordinatesRoving 2 Diameters
Support Point 1 X, Y, Z Diameter1, Diameter2, Diameter3 X, Y, Z Diameter1, Diameter2, Diameter3
Support Point 2 X, Y, Z Diameter1, Diameter2, Diameter3 X, Y, Z Diameter1, Diameter2, Diameter3
further support points

When I understand the table structure I can explain how to make the macro.

Modelling of composites / Re: Voids in a composite
« on: June 25, 2021, 11:11:33 AM »
This is some wht depending. How did you acquire that model?
Is the model a CT-Scan you imported to GeoDict or is it a digital model you generated inside GeoDict?

Modelling of foams / Re: Anisotropic foam
« on: June 25, 2021, 11:05:02 AM »
In the FoamGeo module in the "Basis Geometry" tab you can set the "Basis Pore-Geometry" option to "Use Current Analytic Geometry (GAD)". This option generates the foam on the basis of the curretnly loaded structure in GeoDict.
The loaded structure needs to be:
  • A periodic structure
  • An analytic strucutre, consisting only of GAD objects. Indicated by the green dot besides the "Objects"number in the top left corner
  • Consists only of objects of sphere or ellipsoid type

So you need to generate an anisotropic ellipsoid structure on which you use FoamGeo on.
Does this answer your question? Or dou you need further explanation?

FiberGeo / Re: When do I need to use Isolation Distance in FiberGeo?
« on: June 25, 2021, 10:24:38 AM »
Hello Tabea,

This is a option where fibers are created such that a structure with non-touching fibers is made. In that option the fibers are placed in the structure and when they violate the given isolation distance to another fiber they are removed and a new fiber is placed and checked for violation. This happens until the stopping criterion is reached (for example a given Solid Volume Percentage or a given numbre of fibers).

But in general this approach can take much time for high solid volume fractions so in general we recommen to use the "Remove Overlap" option, here you can also set an Isolation distance.

of course we can:
If you calculate the Diffusivity in x-direction, the entry in the main diagonal x_11 gives you the diffusivity in x-direction. The off-diagonal entries x_12, x_13, x_21 and x_31 give you the amount of diffusion going into y- and z-direction although the driving force, the concentration gradient, is only given in x -direction.
The same goes for Diffusivity in y- and z- direction.

Was that understandable?


Hi Marvin,

yes such a transformation is possible with python and know how ProcessGeo Crop saves the settings to the gps file.

As an example say you have a 200x300x400 (X x Y x Z) structure with a voxel length of 2 µm. And you are looking at the X-Y Plane for the Coordination investigation.
Now you crop the structure in X direction for 20 voxel from the lower sider and 50 voxel from the higher side. That means the X direction is 70 voxels shorter (so it has 130 voxels in total).
Similar you crop the structure in Y direction for 30 voxel from the lower sider and 60 voxel from the higher side. That means the X direction is 90 voxels shorter (so it has 210 voxels in total).
This would mean that the X-Y Coordinates of your new Origin are at 40 µm x 60 µm of your old Origin.
The corresponding ProcessGeo Crop gps looks like:
Code: [Select]
      XMinus 20
      XPlus  50
      YMinus 30
      YPlus  60
      ZMinus 0
      ZPlus  0
So when you obtain coordiantes from the new system X' and Y' you can transform them back to the old system by:
\( X_{old} = X' - 20 * 2 µm \) and \( Y_{old} = Y' - 30 * 2 µm \)
This you can automate by using GeoPython to access the Crop Seetings, here is a small example code:
Code: [Select]
import stringmap

x_new = 1.04*1e-4
y_new = 1.56*1e-4
voxellength = 2*1e-6
gpsMap = stringmap.parseGDR('PathToGPSFile/File.gps')
x_crop = gpsMap.get('ProcessGeo:Crop:XMinus')
y_crop = gpsMap.get('ProcessGeo:Crop:YMinus')

x_trans = x_new + x_crop*voxellength
y_trans = y_new + y_crop*voxellength
In this example your x and y coordiante values in the new system are 104 µm which is 1.04e-4 m and 156 µm which is 1.56e-4 m.
And this code extracts the cropped value in x and y direction and uses it to transform the coordinates into the original coordiante system. Those coordinates are saved in the variable x_trans and y_trans

I hope that help, otherwise I will answer follow up questions.

Pages: [1] 2