CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM CC Toolkits for Fluid-Structure Interaction (https://www.cfd-online.com/Forums/openfoam-cc-toolkits-fluid-structure-interaction/)
-   -   Defining pre-existing Fracture as function of time and Position (https://www.cfd-online.com/Forums/openfoam-cc-toolkits-fluid-structure-interaction/244233-defining-pre-existing-fracture-function-time-position.html)

Axello July 28, 2022 10:56

Defining pre-existing Fracture as function of time and Position
 
Using the basics model of Solid mechanics or Solids4Foam on FE4.0/4.1 for Solid Tutorials, on fractures, the pre-exisiting crack is predefined :

in the fvSolution file, we have :

crackLimitingBoxes
1(
(0 -1e-5 0)(0.06 1e-5 1) // -1e-5 ----- 1e5
);

and in the case file 0/U (D) for displacement, the crack is defined as :

crack
{
type solidCohesive;
relaxationFactor 0.01;
contact no;
penaltyScale 1;
frictionCoeff 0.1;
explicitSeparationDistance no;
value uniform ( 0 0 0 );
}


This assumes the crack height and width are fixed.

1. Please, how can I do to set the crack height/width as a function of time and position?

We have that G = - dΩ/ds , where :
Ω is the strain energy only affected by the change in fracture surface area: dΩ = (dΩ/ds)dΩ
G is the surface Energy release
s : crack surface area

in the file .....\src\solidModels\arbitraryCrack\solidCohesive \solidCohesiveFvPatchVectorField.C, the formula :

if ( ((currentGI_[i]/GIc[i]) + (currentGII_[i]/GIIc[i])) >= 1 )
{
//Pout << "GIc[i] is " << GIc[i] << ", curG is " << currentG << endl;
if (!cracked_[i])
{
Pout << "Face " << i << " is fully cracked" << endl;
}

cracked_[i] = true;

gives the condition criteria for propagation.

In the syntax below
if (dict.found("oldGI"))
{
oldGI_ = scalarField("oldGI", dict, p.size());
}
a declaration and definition of the variable oldGI ?

Or

In FE4.1/tut/solidMechanics/elasticAcpSolidFoam/crackingBiMatDcbDugdale/0 is it proper to define oldGI as follow:

crack
{
type solidCohesive;
relaxationFactor 0.01;
contact no;
penaltyScale 1;
frictionCoeff 0.1;
explicitSeparationDistance no;
oldGI 220; for instance
value uniform ( 0 0 0 );
}


2. Regarding the Surface Energy release, how can one record or extract the data file of Energy release variation w.r.t. crack surface area, to time, and Temperature as well in thermal stress is included?

Thank you.

bigphil August 18, 2022 12:34

Hello Axello,

Quote:

Originally Posted by Axello (Post 832600)
Using the basics model of Solid mechanics or Solids4Foam on FE4.0/4.1 for Solid Tutorials, on fractures, the pre-exisiting crack is predefined :

in the fvSolution file, we have :

crackLimitingBoxes
1(
(0 -1e-5 0)(0.06 1e-5 1) // -1e-5 ----- 1e5
);

and in the case file 0/U (D) for displacement, the crack is defined as :

crack
{
type solidCohesive;
relaxationFactor 0.01;
contact no;
penaltyScale 1;
frictionCoeff 0.1;
explicitSeparationDistance no;
value uniform ( 0 0 0 );
}


This assumes the crack height and width are fixed.

The crack limiting boxes do not specify the crack geometry; instead, they just limit the regions where cracks are allow to initiate and propagate, i.e. the limit the region where cracks are allowed to occur.

The crack limiting boxes are optional and if they are not defined then cracks are allowed everywhere in the domain.

Quote:

Originally Posted by Axello (Post 832600)
1. Please, how can I do to set the crack height/width as a function of time and position?

We have that G = - dΩ/ds , where :
Ω is the strain energy only affected by the change in fracture surface area: dΩ = (dΩ/ds)dΩ
G is the surface Energy release
s : crack surface area

in the file .....\src\solidModels\arbitraryCrack\solidCohesive \solidCohesiveFvPatchVectorField.C, the formula :

if ( ((currentGI_[i]/GIc[i]) + (currentGII_[i]/GIIc[i])) >= 1 )
{
//Pout << "GIc[i] is " << GIc[i] << ", curG is " << currentG << endl;
if (!cracked_[i])
{
Pout << "Face " << i << " is fully cracked" << endl;
}

cracked_[i] = true;

gives the condition criteria for propagation.

In the syntax below
if (dict.found("oldGI"))
{
oldGI_ = scalarField("oldGI", dict, p.size());
}
a declaration and definition of the variable oldGI ?

Or

In FE4.1/tut/solidMechanics/elasticAcpSolidFoam/crackingBiMatDcbDugdale/0 is it proper to define oldGI as follow:

crack
{
type solidCohesive;
relaxationFactor 0.01;
contact no;
penaltyScale 1;
frictionCoeff 0.1;
explicitSeparationDistance no;
oldGI 220; for instance
value uniform ( 0 0 0 );
}


Hmnn.. I am not sure I understand your question. oldGI refers to the total energy dissipated up until the last time-step. This is required because the energy must be integrated to determine how much has been dissipated. Once this dissipated energy reaches the critical energy then the face is fully cracked.


Quote:

Originally Posted by Axello (Post 832600)
2. Regarding the Surface Energy release, how can one record or extract the data file of Energy release variation w.r.t. crack surface area, to time, and Temperature as well in thermal stress is included?

What exactly would you like to plot? GI vs time? crack surface area vs time?

Axello October 11, 2022 08:44

1 Attachment(s)
Dear Dr. Philip,

Thank you for your reply.

I have been trying to run the solver and case without precising CrackLimitBoxes, that is in the file fvSOlution, I commented :

crackLimitingBoxes 1(

(0 -1e-1 0)(0.06 1e-1 1) );

I could have also commented the code portion in the file CreateCrack:

foam-extend-4.0/applications/solvers/solidMechanics/elasticAcpSolidFoam/CreateCrack

From line 65 // limit crack to specified boxes to line 148.

Does this makes sense to you?

While doing this, I have strange results as shown in the first image (at the Left).

Please how to properly apply the fracking with limitBoxes and have such a result as the second image (at the right)?

Thanks in Advance.

bigphil October 11, 2022 09:03

Quote:

Originally Posted by Axello (Post 837278)
Dear Dr. Philip,

Thank you for your reply.

I have been trying to run the solver and case without precising CrackLimitBoxes, that is in the file fvSOlution, I commented :

crackLimitingBoxes 1(

(0 -1e-1 0)(0.06 1e-1 1) );

I could have also commented the code portion in the file CreateCrack:

foam-extend-4.0/applications/solvers/solidMechanics/elasticAcpSolidFoam/CreateCrack

From line 65 // limit crack to specified boxes to line 148.

Does this makes sense to you?

While doing this, I have strange results as shown in the first image (at the Left).

Please how to properly apply the fracking with limitBoxes and have such a result as the second image (at the right)?

Thanks in Advance.

Which results are you trying to reproduce?

Note that the work from Bryant et al. used procedures that may not be available in solids4foam.

Axello October 11, 2022 09:08

1 Attachment(s)
Quote:

Originally Posted by bigphil (Post 834059)
Hello Axello,



The crack limiting boxes do not specify the crack geometry; instead, they just limit the regions where cracks are allow to initiate and propagate, i.e. the limit the region where cracks are allowed to occur.

The crack limiting boxes are optional and if they are not defined then cracks are allowed everywhere in the domain.




Hmnn.. I am not sure I understand your question. oldGI refers to the total energy dissipated up until the last time-step. This is required because the energy must be integrated to determine how much has been dissipated. Once this dissipated energy reaches the critical energy then the face is fully cracked.




What exactly would you like to plot? GI vs time? crack surface area vs time?


I get your point here. However, when I display the GI or GTotal on paraview, there is no variation. I don't know why.

In the constant folder, when defining the cohesizeProperties, we have :
type dugdale;
sigmaMax sigmaMax [1 -1 -2 0 0 0 0] 10e6;
tauMax tauMax [1 -1 -2 0 0 0 0] 10e6;
GIc GIc [1 0 -2 0 0 0 0] 200;
GIIc GIIc [1 0 -2 0 0 0 0] 200;

Since we already have GI and GII, How are GI and GII calculated to have (GI/GIc) + (GII/GIIc) >=1 as propagation criteria ?
The same with sigmaMax and tauMax. How do we get sigmaMaxc and tauMaxc to get (sigmaMax/sigmaMaxc)^2 + (tauMax/tauMaxc)^2 >=1 ?

The value of GI and GI with GTotal should change as the fracture propagates, right?


Code:

What  exactly would you like to plot? GI vs time? crack surface area vs  time?
I would like to plot (a) GI vs Time ; (b) GII vs Time ; (c) Crack surface area vs Time ;


Another issue here, since I can't get the fluid mesh to enter the rock domain as the fracture propagates, I defined a BC as given in the image in attached.

scalar meanU = gSum(U & patch().Sf())/gSum(patch().magSf());
Fracture Pres = -(nu./kperm.*meanU);

Now I want to store (in a .txt file) and display/plot (Gnuplot) this variation of this BC (Fracking Pressure) at Fracture walls. Please how to save my BC variation with time in a .txt ?

I want to store Frac Press evolution in a .txt and plot it later to see the variation.

Thank You Dr. Philip.

Axello October 11, 2022 09:22

Dear Philip,

I want to reproduce some results of Dongkeun Lee in the his PhD thesis "A Model for Hydraulic Fracturing and Proppant Placement in Unconsolidated Sands".

In the criterion for fracture initiation given in updateCrack.H (tN/tNC)^2 + (tS/tSC)^2 >1 to crack a face, how to you assess tNC and tSC?

Also how do the condition (GI/GIc) + (GII/GIIc) > 1 executed? How do you find the GI and GII ?

Because in CohesiveProperties,
cohesive
{
type dugdale;
sigmaMax sigmaMax [1 -1 -2 0 0 0 0] 10e6;
tauMax tauMax [1 -1 -2 0 0 0 0] 10e6;
GIc GIc [1 0 -2 0 0 0 0] 200;
GIIc GIIc [1 0 -2 0 0 0 0] 200;
}

only sigmaMax, tauMax GIc, GIIc are given.

Thank You.

Axello December 21, 2022 10:19

Quote:

Originally Posted by Axello (Post 837278)
Dear Dr. Philip,

Thank you for your reply.

I have been trying to run the solver and case without precising CrackLimitBoxes, that is in the file fvSOlution, I commented :

crackLimitingBoxes 1(

(0 -1e-1 0)(0.06 1e-1 1) );

I could have also commented the code portion in the file CreateCrack:

foam-extend-4.0/applications/solvers/solidMechanics/elasticAcpSolidFoam/CreateCrack

From line 65 // limit crack to specified boxes to line 148.

Does this makes sense to you?

While doing this, I have strange results as shown in the first image (at the Left).

Please how to properly apply the fracking with limitBoxes and have such a result as the second image (at the right)?

Thanks in Advance.



Hi Philip,

Please can I have your inputs on this?

Best Regards,
Axel

Axello December 21, 2022 11:05

2 Attachment(s)
Quote:

Originally Posted by Axello (Post 837283)
I get your point here. However, when I display the GI or GTotal on paraview, there is no variation. I don't know why.

In the constant folder, when defining the cohesizeProperties, we have :
type dugdale;
sigmaMax sigmaMax [1 -1 -2 0 0 0 0] 10e6;
tauMax tauMax [1 -1 -2 0 0 0 0] 10e6;
GIc GIc [1 0 -2 0 0 0 0] 200;
GIIc GIIc [1 0 -2 0 0 0 0] 200;

Since we already have GI and GII, How are GI and GII calculated to have (GI/GIc) + (GII/GIIc) >=1 as propagation criteria ?
The same with sigmaMax and tauMax. How do we get sigmaMaxc and tauMaxc to get (sigmaMax/sigmaMaxc)^2 + (tauMax/tauMaxc)^2 >=1 ?

The value of GI and GI with GTotal should change as the fracture propagates, right?


Code:

What  exactly would you like to plot? GI vs time? crack surface area vs  time?
I would like to plot (a) GI vs Time ; (b) GII vs Time ; (c) Crack surface area vs Time ;


Another issue here, since I can't get the fluid mesh to enter the rock domain as the fracture propagates, I defined a BC as given in the image in attached.

scalar meanU = gSum(U & patch().Sf())/gSum(patch().magSf());
Fracture Pres = -(nu./kperm.*meanU);

Now I want to store (in a .txt file) and display/plot (Gnuplot) this variation of this BC (Fracking Pressure) at Fracture walls. Please how to save my BC variation with time in a .txt ?

I want to store Frac Press evolution in a .txt and plot it later to see the variation.

Thank You Dr. Philip.



Hi Philip,

Please can I have your view on the issues mentioned above?

I finally got how to record the pressure variation on .txt file.


Regarding the plotting of GI and GII, it does not change values on Paraview but vary in simulation timesteps (see attached).

Finally, please how can I plot the :
(c) Crack surface area vs Time ; (b) GI vs Time ; (c) GII vs Time ; (c) GTotal vs Time ;


regards,

bigphil December 21, 2022 11:18

Quote:

Originally Posted by Axello (Post 837285)
Dear Philip,

I want to reproduce some results of Dongkeun Lee in the his PhD thesis "A Model for Hydraulic Fracturing and Proppant Placement in Unconsolidated Sands".

In the criterion for fracture initiation given in updateCrack.H (tN/tNC)^2 + (tS/tSC)^2 >1 to crack a face, how to you assess tNC and tSC?

Also how do the condition (GI/GIc) + (GII/GIIc) > 1 executed? How do you find the GI and GII ?

Because in CohesiveProperties,
cohesive
{
type dugdale;
sigmaMax sigmaMax [1 -1 -2 0 0 0 0] 10e6;
tauMax tauMax [1 -1 -2 0 0 0 0] 10e6;
GIc GIc [1 0 -2 0 0 0 0] 200;
GIIc GIIc [1 0 -2 0 0 0 0] 200;
}

only sigmaMax, tauMax GIc, GIIc are given.

Thank You.

Hi Axel,

In Dongkeun's work, he used a custom form of the solidCohesive boundary condition, where a hydraulic pressure was applied to the cracked patches. This hydraulic pressure increased as a function of the injected fluid and the crack volume, i.e. the pressure increases as the amount of injected fluid increases, but when the crack propagated, the pressure may temporarily drop as the volume increased.

You may like to contact Dongkeun to see if his boundary condition can be shared.

Philip

Axello February 9, 2023 02:20

Quote:

Originally Posted by bigphil (Post 841578)
Hi Axel,

In Dongkeun's work, he used a custom form of the solidCohesive boundary condition, where a hydraulic pressure was applied to the cracked patches. This hydraulic pressure increased as a function of the injected fluid and the crack volume, i.e. the pressure increases as the amount of injected fluid increases, but when the crack propagated, the pressure may temporarily drop as the volume increased.

You may like to contact Dongkeun to see if his boundary condition can be shared.

Philip


Hi Philip,

Thanks for your reply.

Please how can I plot the :
(a) Crack surface area vs Time (mostly this); (b) GI vs Time ; (c) GII vs Time ; (d) GTotal vs Time ;

Also, in the crackingBiMatDcbDugdale case, what represents the materials file? Is it to define the material properties such as permeability or porosity or strength or something else?

Thank You !!!

bigphil February 14, 2023 05:17

Hi Axel,

Sorry for the delay.

It is possible to plot all these values, however, you need to edit the code to print out this data.

Which "materials" file are you referring to? And which version of code?

Dorian90 February 14, 2023 05:22

1 Attachment(s)
Quote:

Originally Posted by bigphil (Post 844531)
Hi Axel,

Sorry for the delay.

It is possible to plot all these values, however, you need to edit the code to print out this data.

Which "materials" file are you referring to? And which version of code?

Dear Philip,

Thanks for your reply.
Please can you give me hint or tip on how to edit the code to have the crack surface area Vs Time?

As regarding the materials, see the image below of what I referred to.

Thank You.

bigphil February 14, 2023 11:14

OK, you are referring to elasticAcpSolidFoam in the solidMechanics toolbox, as opposed to solids4foam.

In the solidMechanics toolbox, the "materials" file is used to indicate the different material regions, e.g. "0" indicates a cell is part of material0, "1" is part of material1, etc.

In solids4foam, the materials file was removed, and, instead, material regions are indicated using cellZones.

In terms of writing out the data you want, I suggest becoming familiar with the code in the solidCohesive boundary condition and then create an output file, e.g. OFstream myFile("myFile.txt"), and write any information you are interested in.


All times are GMT -4. The time now is 00:34.