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
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.

Modelling of composites / Re: Curved Circular Fibers
« on: June 10, 2021, 08:59:04 AM »
Thank you for translating your post to englisch.
I will just copy my answer from above again so that we have the answer below the question ;)
To answer your question. If your Domain length is 500 µm it should be enough to use 550 µm long fibers and define the fiber centers for the generation.
You can find that option in the Fiber Options where you can also set the Diameter, Length and Orientation.
Here you click on the "Edit" beside the "Center" and choose the option "Unfiformly in Box".
Assume your fibers are oriented in X-direction, you fill the options as:
X-min = 545 µm ; X-max = 555 µm
Y-min = 0 µm     ; Y-max = "domain length in Y-direction"
Z-min = 0 µm     ; Z-max = "domain length in Z-direction"

Can you have  brief look if this helps you out?

Modelling of composites / Re: Curved Circular Fibers
« on: June 04, 2021, 05:24:10 PM »
Hi Tim,

welcome to the Forum :)
First, could you please repost your question down below in english? Our official Forum language is enligsh and this would help all of our clients to benefit froum your question.

Second to answer your question. If your Domain length is 500 µm it should be enough to use 550 µm long fibers and define the fiber centers for the generation.
You can find that option in the Fiber Options where you can also set the Diameter, Length and Orientation.
Here you click on the "Edit" beside the "Center" and choose the option "Unfiformly in Box".
Assume your fibers are oriented in X-direction, you fill the options as:
X-min = 545 µm ; X-max = 555 µm
Y-min = 0 µm     ; Y-max = "domain length in Y-direction"
Z-min = 0 µm     ; Z-max = "domain length in Z-direction"

Using that option you will need way shorter fibers because you set their center to be placed in the middle of the structure.
Please give us a short feedback if that helped.

FiberGeo / Re: Periodic X in FiberGeo
« on: June 01, 2021, 11:05:39 AM »
Hello Tabea,
Periodic X will make GeoDict to generate the strucutre periodically in X direction. The same holds for the other directions Y and Z.
So you can make a full periodic strucutre in each direction, but also choose specific directions for periodicity, e.g. periodic in X and Z direction but non-periodic in Y direction.

FiberFind / Re: Get separate Material IDs from a .g32 file
« on: May 27, 2021, 05:13:28 PM »
Hello Barbara,
first of all welcome to the forum and have a good time here!

You can use our ImportGeo-Base module for that. You can load the .g32 file with it and then you have it in different material IDs. This structure can then save as .gdt file.
Did this answer your question?

Hallo, first of all welcome here to the forum. Nice to have questions here :)

Let me try to summarize answers here:
1. As in real experiments, the capacity reached by the charging simulation depends on the criterium that stops the time evolution of the battery.
2. For a constant C-rate the most important stopping criteria are:     
    a) Reaching a user-defined final Cell SOC (implemented in BatteryDict2018 as “Battery’s State-ofCharge Range” or “Range of the Cell State of Charge”)   
    b) Reaching a user-defined final cell potential (this will be implemented in BatteryDict 2022)
3. The stopping criterion (b) will result in different reached capacities depending on the user-defined C rate.
4. For any constant C Rate, the stopping criteria (a) will result in the same reached capacity, if the cell potential does not diverge during the simulation.
5. One can reproduce the result of the stopping criterion (b) with the stopping critertion (a) using a certain trick.

The trick I mentioned is:
1. Definition of settings in ChargeBattery for stopping criterium with final cell SOC:
    a) \( SOC_{start} \): User-defined initial cell SOC.
    b) \( SOC_{endt} \): User-defined final cell SOC.
    c) \( C\text{-}rate \): user-defined charge rate.
2. Known from analyzing the battery structure and using the material settings:
    a) \( C_{theo} \): theoretical capacity of the full battery including unconnected active material, see result map in GDR: “Battery:TotalCapacity”
3. By the definition of the cell state of charge, we already know:
    a) \( C_{reached} = | SOC_{end} - SOC_{start} | * C_{theo} \)
4. Additionally, we can determine the time for charging the battery cell:
    a) \( reached\text{ }time = | SOC_{end} - SOC_{start} | * \frac{3600 s}{C\text{-}rate} \)
    b) (Example 1: the C-rate=1 charges 100% of \( C_{theo} \) within one hour (3600 s).
        (Example 2: The C-rate=3 charges 50% of  \( C_{theo} \)  within a sixth of an hour (600 s).
5. We know this without having done any simulation with BatteryDict.
6. This comes directly from the chosen stopping criterion and does not depend on the rest of the algorithm.

Did this answer your question?

Forum FAQs / Frequently asked questions:
« on: September 14, 2020, 04:25:08 PM »
Hello everyone welcome to our Forum-FAQs

  • Why can I not make a post to the forum?
  • Where can I change my password, username, etc.?
  • Uploading my profile pictures does not work?
    • The profile picture size is limited to 2 MB.
  • How do I delete my account?
  • 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. See question number 1.
  • 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]

Pages: [1] 2