Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Pushover analysis force analogy method with force control based on euler bernoulli beam theory in c programming
1. >> IN THE NAME OF GOD <<
Pushover Semi Rigid Connection Analysis Force Analogy Method with Force Control Based on
Euler-Bernoulli Beam Theory in C programming
C program is written by Salar Delavar Ghashghaei – Publication Date: 20/October/2019
E-mail: salar.d.ghashghaei@gmail.com
2. C Code:
#include <stdio.h>
#include <windows.h> // text color
#include <conio.h>
#define NN 6 // Degree of freedom
#define Ne 1 // number of element
#define N 2 // number of node
#define STEP 5000 // number of node
#define ShowText01 "PushoverLinearSemiRigidBerFC-inputDATA.csv"
#define ShowText02 "PushoverLinearSemiRigidBerFC-inputCOORDINATE.csv"
#define ShowText04 "Output data is written in Excel and Html file"
#define ShowText05 "PushoverLinearSemiRigidBerFC-outputEXCEL.csv"
#define ShowText06 "PushoverLinearSemiRigidBerFC-outputHTML.html"
#define ShowText07 "Graph-outputHTML.html"
void IMPORT_DATA01(double &EA,double &EI,double Spring_Stiff[],double &Fini,int &M);
void IMPORT_DATA02(double x[],double y[],int &n);
void MatrixZero(double A[][NN],int n);
void Matrix_Stiffness(double Spring_Stiff[],double EA,double EI,double L[],double lanX[],double lanY[],double A[],double B[],double C[],double D[],double E[],double K[][6],double K_G[][6],int I,int II);
void MatrixDetermination(double A[][NN],int n,double &Product);
void MatrixInverse(double [][NN], double [][NN],int );
void MatrixMulti01(double [][NN], double [], double [],int );
void Matrix_Transpose(double A[6][6],double B[6][6]);
void Matrix_Multiplication(double A[6][6],double B[6][6],double C[6][6]);
void ElementInternalForce(double K[][6],double U[],double lanX[],double lanY[],double ee[][6],int I,int II);// Calculate internal element force
void ELEMNT_FORCE_OUTPUT(double eleF[1][6],double ELE_FORCE[6][STEP],int n);
double ABS(double);
double MIN(double A[],int n);
double SQRT2(double D);
void MessageInitialData(double Spring_Stiff[],double EI,double EA,double Fini,double x[],double y[],int M);
void MessageAnalysisReport();
void MessageErrorReportTEXT();
void MessageInputDataTEXT();
void MessageCheck_IMPORT_DATA01(double Spring_Stiff[],double EI,double EA,int M);
void MessageCheckMk(int M);
void MessageStrCoorTEXT(double X[],double Y[],int n);
void MessageResult(double output_base01[],double output_base02[],double output_u01[],int n);
int MessageControl(double eleF[Ne][6],double u[],double TET01[],double MOM01[],double TET02[],double MOM02[],int n);
void OUTPUT_excel(double output_u01[],double output_base01[],double output_base02[],double C[6][STEP],int n);
void OUTPUT_html(double EI,double EA,double Fini,double X[],double Y[],double output_u01[],double output_base01[],double output_base02[],double C[6][STEP],int n,int M);
void ANALYSIS(double Spring_Stiff[],double EI,double EA,double Fini,double x[],double y[],int M);
void Distance(int);
void textcolor(int ForgC);
void DATE_TIME();
void OUTPUT_HTML_GRAPH(double X[],double Y[],int n,const char text1[],const char text2[],const char text3[]);
double MAX_ABS(double A[],int n);
int main(){
double EI,EA,Fini,x[2],y[2],Spring_Stiff[2];
int n,m,M;
IMPORT_DATA01(EA,EI,Spring_Stiff,Fini,M);
IMPORT_DATA02(x,y,n);
MessageCheck_IMPORT_DATA01(Spring_Stiff,EI,EA,M);
MessageCheckMk(M);
textcolor(14);
MessageInitialData(Spring_Stiff,EI,EA,Fini,x,y,M);
MessageStrCoorTEXT(x,y,n);
textcolor(11);
MessageAnalysisReport();
ANALYSIS(Spring_Stiff,EI,EA,Fini,x,y,M);
getch();
return 0;
}
void MatrixZero(double A[][NN],int n){
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
A[i][j] = 0;
}
void MatrixInverse(double A[][NN], double C[][NN],int n){
int i,j,l;
double c_A[n][n],B[n][n],m,Sum;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
c_A[i][j]=A[i][j];
// Inverse [Kinit]
for (i=0;i<n;i++)
for (j=0;j<n;j++){
if (i==j)
B[i][j]=1;
else
B[i][j]=0;
}
for (j=0;j<n-1;j++)
for (i=j+1;i<n;i++){
m=c_A[i][j]/c_A[j][j];
for (l=0;l<n;l++){
c_A[i][l] -= m*c_A[j][l];
B[i][l] -= m*B[j][l];
}
}
// backward substitutions
for (i=n-1;i>=0;i--)
for (j=0;j<n;j++){
Sum=0;
for (l=i+1;l<n;l++)
Sum += c_A[i][l]*C[l][j];
C[i][j]=(B[i][j]-Sum)/c_A[i][i];
}
}
void ElementInternalForce(double K[][6],double U[],double lanX[],double lanY[],double ee[][6],int I,int II){
double lan[6][6],UU[6],ff,ll[6][6];
int i,j;
lan[0][0]=lanX[I];lan[0][1]=lanY[I];lan[0][2]=0;lan[0][3]=0;lan[0][4]=0;lan[0][5]=0;
lan[1][0]=-lanY[I];lan[1][1]=lanX[I];lan[1][2]=0;lan[1][3]=0;lan[1][4]=0;lan[1][5]=0;
lan[2][0]=0;lan[2][1]=0;lan[2][2]=1;lan[2][3]=0;lan[2][4]=0;lan[2][5]=0;
lan[3][0]=0;lan[3][1]=0;lan[3][2]=0;lan[3][3]=lanX[I];lan[3][4]=lanY[I];lan[3][5]=0;
lan[4][0]=0;lan[4][1]=0;lan[4][2]=0;lan[4][3]=-lanY[I];lan[4][4]=lanX[I];lan[4][5]=0;
lan[5][0]=0;lan[5][1]=0;lan[5][2]=0;lan[5][3]=0;lan[5][4]=0;lan[5][5]=1;
if (II == 1){
UU[0]=0;UU[1]=0;UU[2]=U[2];UU[3]=U[0];UU[4]=0;UU[5]=0;
}
for (i=0;i<6;i++)
for (j=0;j<6;j++)
ll[i][j]=0;
// [f] = [K] *[lan]* [u]
Matrix_Multiplication(K,lan,ll);
for (i=0; i<6; i++){
ff=0;
for (j=0; j<6; j++)
ff += ll[i][j]*UU[j];
ee[I][i] = ff;
}
}
void MatrixMulti01(double A[][NN], double B[], double C[],int n){
int i,j;
3. double ff;
// [u] = [Kinv] * [f]
for (i=0; i<n; i++)
{
ff=0;
for (j=0; j<n; j++)
ff += A[i][j]*B[j];
C[i] = ff;
}
}
double ABS(double B){
if (B < 0)
B = -B;//Absolute number
else
B = B;
return B;
}
double MIN(double A[],int n){
int i;
double Cmin;
Cmin = A[0];
// Max of abs
for (i=0;i<n;i++){
if(Cmin > A[i])
Cmin = A[i];
}
return Cmin;
}
void Distance(int i){
if (i < 10)
printf("bt");
if (i >= 10 && i <= 99)
printf("btb");
if (i >= 100 && i <= 999)
printf("btbb");
if (i >= 1000 && i <= 9999)
printf("btbbb");
if (i >= 10000 && i <= 20000)
printf("btbbbb");
}
void MessageInitialData(double Spring_Stiff[],double EI,double EA,double Fini,double x[],double y[],int M){
char Qa,Qb,Qc,Qd,Qe,Qf,Qg,Qk;
int i;
Qa=201;Qb=205;Qc=187;Qd=200;Qe=188,Qf=186,Qg=204,Qk=185;
printf("tttt%c",Qa);
for (i=1;i<82;i++)
printf("%c",Qb);
printf("%cn",Qc);
printf("tttt%c >> IN THE NAME OF GOD << %cn",Qf,Qf);
printf("tttt%c Pushover Semi Rigid Connection Analysis Force Analogy Method with Force Control %cn",Qf,Qf);
printf("tttt%c Based on Euler-Bernoulli Beam Theory %cn",Qf,Qf);
printf("tttt%c UNIT: Free Unit %cn",Qf,Qf);
printf("tttt%c",Qg);
for (i=1;i<82;i++)
printf("%c",Qb);
printf("%cn",Qk);
printf("tttt%c This program is written by Salar Delavar Ghashghaei %cn",Qf,Qf);
printf("tttt%c E-mail: salar.d.ghashghaei@gmail.com %cn",Qf,Qf);
printf("tttt%c",Qd);
for (i=1;i<82;i++)
printf("%c",Qb);
printf("%cn",Qe);
MessageInputDataTEXT();
printf(" Section flextural rigidity - EI: %.3en",EI);
printf(" Section axial rigidity - EA: %.3en",EA);
printf(" Rotational spring stiffness-i: %.3en",Spring_Stiff[0]);
printf(" Rotational spring stiffness-j: %.3en",Spring_Stiff[1]);
printf(" External Incremental Fx force [DOF(4)]: %.3en",Fini);
printf(" Number of increment: %dn",M);
}
void MessageAnalysisReport(){
int i;
char Ql=176;
printf("n ");
for (i=1;i<64;i++)
printf("%c",Ql);
printf(" Analysis Report ");
for (i=1;i<64;i++)
printf("%c",Ql);
printf("n");
}
void MessageCheck_IMPORT_DATA01(double Spring_Stiff[],double EI,double EA,int M){
if (EI <= 0 || EA <= 0 || M <= 0 ){
MessageErrorReportTEXT();
printf(" Please check this file! -> [%s]n",ShowText01);
printf(" *** Negative or zero data input value is not acceptable ***n");
printf("tt Section flextural rigidity - EI: %.3en",EI);
printf("tt Section axial rigidity - EA: %.3en",EA);
printf("tt Rotational spring stiffness-i: %.3en",Spring_Stiff[0]);
printf("tt Rotational spring stiffness-j: %.3en",Spring_Stiff[1]);
printf("tt Number of increment: %dn",M);
Sleep(40000);
exit(1);
}
}
void MessageCheckMk(int M){
if (M < 2 || M > STEP){
MessageErrorReportTEXT();
printf(" Please check this file! -> [%s]n",ShowText01);
printf(" Number of increment: %d - Plastic hinge data must be data -> Minimum : 2 - Maximum : %dn",M,STEP);
Sleep(40000);
exit(1);
}
}
void MessageErrorReportTEXT(){
int i;
char Ql;
Ql=176;
textcolor(12);
printf("an ");
for (i=1;i<50;i++)
printf("%c",Ql);
printf(" Error Report ");
for (i=1;i<50;i++)
printf("%c",Ql);
printf("n");
}
void MessageInputDataTEXT(){
int i;
char Ql=176;
printf("n ");
for (i=1;i<50;i++)
printf("%c",Ql);
printf(" Input Data ");
for (i=1;i<50;i++)
printf("%c",Ql);
4. printf("n");
}
void OUTPUT_excel(double output_u01[],double output_base01[],double output_base02[],double C[6][STEP],int n){
// EXCEL OUTPUT
int i,I;
FILE *OutputFile;
OutputFile = fopen(ShowText05, "w");
fprintf(OutputFile," ### Pushover Semi Rigid Connection Analysis Force Analogy Method with Force Control Based on Euler-Bernoulli Beam Theory ###n");
fprintf(OutputFile,"n");
fprintf(OutputFile,"Increment,Base Shear [DOF(1)],Base Moment [DOF(3)],Displacement [DOF(4)]n");
for(i=0;i<n;i++)
fprintf(OutputFile,"%d,%e,%e,%en",i+1,output_base01[i],output_base02[i],output_u01[i]);
fprintf(OutputFile,"n");
fprintf(OutputFile,"Increment,axial-i,shear-i,moment-i,axial-j,shear-j,moment-jn");
for(i=0;i<n;i++)
fprintf(OutputFile,"%d,%e,%e,%e,%e,%e,%en",i+1,C[0][i],C[1][i],C[2][i],C[3][i],C[4][i],C[5][i]);
fclose(OutputFile);
}
void MatrixDetermination(double A[][NN],int n,double &Product){
// row operations
int i,j,k;
double m,B[n][n];
for (i=0;i<n;i++)
for (j=0;j<n;j++)
B[i][j]=A[i][j];
for (k=0;k<n-1;k++)
for (i=k+1;i<n;i++){
m = B[i][k]/B[k][k];
for (j=0;j<n;j++)
B[i][j] -= m*B[k][j];
}
Product=1;
for (i=0;i<n;i++)
Product *= B[i][i];
// display results
if (Product == 0){
printf("ant ### it Seens that Golobal Matrix is singular or structure is unstable!!! ###n");
//Sleep(40000);
//exit(1);
}
}
void IMPORT_DATA01(double &EA,double &EI,double Spring_Stiff[],double &Fini,int &M){
double Import_Data[6];
int i=0;
FILE *InputFile;
InputFile = fopen(ShowText01, "r");
if (!InputFile){
MessageErrorReportTEXT();
printf(" File is not available! -> [%s] n",ShowText01);
Sleep(6000);
exit(1);
}
char line[100],a[100];
while(i < 7 && fgets(line,sizeof(line),InputFile) != NULL){
sscanf(line,"%s",a);
//printf("a[%d]: %sn",i,a);
Import_Data[i]= atof(a);
i++;
}
EI=Import_Data[0];
EA=Import_Data[1];
Spring_Stiff[0]=Import_Data[2];
Spring_Stiff[1]=Import_Data[3];
Fini=Import_Data[4];
M=Import_Data[5];
}
void IMPORT_DATA02(double x[],double y[],int &n){
int i = 0;
FILE *InputFile;
InputFile = fopen(ShowText02, "r");
if (!InputFile){
MessageErrorReportTEXT();
printf(" File is not available! -> [%s] n",ShowText02);
Sleep(6000);
exit(1);
}
char line[1000];
do{
fscanf(InputFile,"%lf,%lf",&x[i],&y[i]);
i++;
}
while(i < 2 && fgets(line,sizeof(line),InputFile) != NULL);
n = i;
//printf("%dn",n);
}
void textcolor(int ForgC){
WORD wColor;
//This handle is needed to get the current background attribute
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//csbi is used for wAttributes word
if(GetConsoleScreenBufferInfo(hStdOut, &csbi)){
//To mask out all but the background attribute, and to add the color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
}
return;
}
void ANALYSIS(double Spring_Stiff[],double EI,double EA,double Fini,double x[],double y[],int M){
int i,j,z,zMAX,I;
double Product,K[NN][NN],Kinv[NN][NN],eleF[Ne][6];
double L[Ne],lanX[Ne],lanY[Ne],AA[Ne],BB[Ne],CC[Ne],DD[Ne],EE[Ne],FF[NN],u[NN];
double *output_u01 = new double [STEP];
double *output_base01 = new double [STEP];
double *output_base02 = new double [STEP];
double *X = new double [STEP];
double *Y = new double [STEP];
double ELE_FORCE[6][STEP];
double MS[6][6],KG[6][6];
MatrixZero(K,1);
for (i=0;i<1;i++)
u[i] = 0;
for (i=0;i<STEP;i++)
output_u01[i] = 0.0;
for(i=0;i<6*Ne;i++)
for(j=0;j<M;j++)
ELE_FORCE[i][j] = 0;
for (i=0;i<Ne;i++){
L[i] = SQRT2((x[i+1]-x[i])*(x[i+1]-x[i])+(y[i+1]-y[i])*(y[i+1]-y[i]));
lanX[i] = (x[i+1]-x[i])/L[i];lanY[i] = (y[i+1]-y[i])/L[i];
}
5. // STAGE 01
for (z=0;z<M;z++){
FF[0]=Fini*(z+1);
Matrix_Stiffness(Spring_Stiff,EA,EI,L,lanX,lanY,AA,BB,CC,DD,EE,MS,KG,0,1); // 0: ele 1 - 1: stiffness matrix: 1
K[0][0]= KG[3][3];//DOF(4)
MatrixInverse(K,Kinv,1);// Inverse [Kinit]
MatrixMulti01(Kinv,FF,u,1);
zMAX = z + 1;
ElementInternalForce(MS,u,lanX,lanY,eleF,0,1);// 1: step 1
ELEMNT_FORCE_OUTPUT(eleF,ELE_FORCE,z);
output_u01[z]=u[0];//output displacement DOF(4)
output_base01[z]=-ELE_FORCE[1][z];//output base shear DOF(1)
output_base02[z]=-ELE_FORCE[2][z];//output base moment DOF(3)
}// for
MessageResult(output_base01,output_base02,output_u01,zMAX);
OUTPUT_excel(output_u01,output_base01,output_base02,ELE_FORCE,zMAX);
OUTPUT_html(EI,EA,Fini,x,y,output_u01,output_base01,output_base02,ELE_FORCE,zMAX,M);
for (i=0;i<zMAX;i++){
X[i] = output_u01[i];// Disp. DOF(5)
Y[i] = output_base01[i];// Base Shear DOF(1)
}
OUTPUT_HTML_GRAPH(X,Y,zMAX,"Base Shear-Displacement Graph","Displacement [DOF(5)]","Base Shear [DOF(1)]");
textcolor(15);
printf("na - %s -n",ShowText04);
system("start /w Graph-outputHTML.html");
DATE_TIME();
free(output_u01);
free(output_base01);free(output_base02);
free(X);free(Y);
}
void DATE_TIME(){
printf("nt");
system("echo %date%");
printf("t");
system("echo %time%");
}
void Matrix_Stiffness(double Spring_Stiff[],double EA,double EI,double L[],double lanX[],double lanY[],double A[],double B[],double C[],double D[],double E[],double K[][6],double K_G[][6],int I,int II){
int i,j;
double lan[6][6],lan_Tr[6][6],ans[6][6],r[2],R;
for (i=0;i<2;i++)
r[i] = (Spring_Stiff[i]*L[I])/(EI+Spring_Stiff[i]*L[I]);
R = 12 - 8*(r[0]+r[1]) + (5*r[0]*r[1]);
EI = EI/R;
A[I] = (4*EI/L[I]) * (3*r[0]-2*r[0]*r[1]);
B[I] = (6*EI/(L[I]*L[I])) * (2*r[0]-r[0]*r[1]);
C[I] = (2*EI/L[I]) *(r[0]*r[1]);
D[I] = (12*EI/(L[I]*L[I]*L[I])) * (r[0]+r[1]-r[0]*r[1]);
E[I] = EA/L[I];
for (i=0;i<6;i++)
for (j=0;j<6;j++)
K[i][j] = 0.0;
//I:2 number of element - II: kind of stiffness matrix
if (II==1){// No plastic hinge
K[0][0]=E[I];K[0][1]=0;K[0][2]=0;K[0][3]=-E[I];K[0][4]=0;K[0][5]=0;
K[1][0]=0;K[1][1]=D[I];K[1][2]=B[I];K[1][3]=0;K[1][4]=-D[I];K[1][5]=B[I];
K[2][0]=0;K[2][1]=B[I];K[2][2]=A[I];K[2][3]=0;K[2][4]=-B[I];K[2][5]=C[I];
K[3][0]=-E[I];K[3][1]=0;K[3][2]=0;K[3][3]=E[I];K[3][4]=0;K[3][5]=0;
K[4][0]=0;K[4][1]=-D[I];K[4][2]=-B[I];K[4][3]=0;K[4][4]=D[I];K[4][5]=-B[I];
K[5][0]=0;K[5][1]=B[I];K[5][2]=C[I];K[5][3]=0;K[5][4]=-B[I];K[5][5]=A[I];
}
if (II==2){// plastic hinge at i
K[0][0]=E[I];K[0][1]=0;K[0][2]=0;K[0][3]=-E[I];K[0][4]=0;K[0][5]=0;
K[1][0]=0;K[1][1]=.25*D[I];K[1][2]=0;K[1][3]=0;K[1][4]=-.25*D[I];K[1][5]=.5*B[I];
K[2][0]=0;K[2][1]=0;K[2][2]=0;K[2][3]=0;K[2][4]=0;K[2][5]=0;
K[3][0]=-E[I];K[3][1]=0;K[3][2]=0;K[3][3]=E[I];K[3][4]=0;K[3][5]=0;
K[4][0]=0;K[4][1]=-.25*D[I];K[4][2]=0;K[4][3]=0;K[4][4]=.25*D[I];K[4][5]=-.5*B[I];
K[5][0]=0;K[5][1]=.5*B[I];K[5][2]=0;K[5][3]=0;K[5][4]=-.5*B[I];K[5][5]=(3/4)*A[I];
}
if (II==3){// plastic hinge at j
K[0][0]=E[I];K[0][1]=0;K[0][2]=0;K[0][3]=-E[I];K[0][4]=0;K[0][5]=0;
K[1][0]=0;K[1][1]=.25*D[I];K[1][2]=.5*B[I];K[1][3]=0;K[1][4]=-.25*D[I];K[1][5]=0;
K[2][0]=0;K[2][1]=.5*B[I];K[2][2]=(3/4)*A[I];K[2][3]=0;K[2][4]=-.5*B[I];K[2][5]=0;
K[3][0]=-E[I];K[3][1]=0;K[3][2]=0;K[3][3]=E[I];K[3][4]=0;K[3][5]=0;
K[4][0]=0;K[4][1]=-.25*D[I];K[4][2]=-.5*B[I];K[4][3]=0;K[4][4]=.25*D[I];K[4][5]=0;
K[5][0]=0;K[5][1]=0;K[5][2]=0;K[5][3]=0;K[5][4]=0;K[5][5]=0;
}
if (II==4){// plastic hinge at i and j
K[0][0]=E[I];K[0][1]=0;K[0][2]=0;K[0][3]=-E[I];K[0][4]=0;K[0][5]=0;
K[1][0]=0;K[1][1]=0;K[1][2]=0;K[1][3]=0;K[1][4]=0;K[1][5]=0;
K[2][0]=0;K[2][1]=0;K[2][2]=0;K[2][3]=0;K[2][4]=0;K[2][5]=0;
K[3][0]=-E[I];K[3][1]=0;K[3][2]=0;K[3][3]=E[I];K[3][4]=0;K[3][5]=0;
K[4][0]=0;K[4][1]=0;K[4][2]=0;K[4][3]=0;K[4][4]=0;K[4][5]=0;
K[5][0]=0;K[5][1]=0;K[5][2]=0;K[5][3]=0;K[5][4]=0;K[5][5]=0;
}
lan[0][0]=lanX[I];lan[0][1]=lanY[I];lan[0][2]=0;lan[0][3]=0;lan[0][4]=0;lan[0][5]=0;
lan[1][0]=-lanY[I];lan[1][1]=lanX[I];lan[1][2]=0;lan[1][3]=0;lan[1][4]=0;lan[1][5]=0;
lan[2][0]=0;lan[2][1]=0;lan[2][2]=1;lan[2][3]=0;lan[2][4]=0;lan[2][5]=0;
lan[3][0]=0;lan[3][1]=0;lan[3][2]=0;lan[3][3]=lanX[I];lan[3][4]=lanY[I];lan[3][5]=0;
lan[4][0]=0;lan[4][1]=0;lan[4][2]=0;lan[4][3]=-lanY[I];lan[4][4]=lanX[I];lan[4][5]=0;
lan[5][0]=0;lan[5][1]=0;lan[5][2]=0;lan[5][3]=0;lan[5][4]=0;lan[5][5]=1;
Matrix_Transpose(lan,lan_Tr);
Matrix_Multiplication(lan_Tr,K,ans);
Matrix_Multiplication(ans,lan,K_G);
}
void ELEMNT_FORCE_OUTPUT(double eleF[1][6],double ELE_FORCE[6][STEP],int n){
int i;
for (i=0;i<6;i++)
ELE_FORCE[i][n]=eleF[0][i];
}
double SQRT2(double D){
int it,itermax;
double residual,tolerance,x,dx,dx_ABS,f,df;
it = 0; // initialize iteration count
itermax = 100000;
residual = 100; // initialize residual
tolerance = 1e-12;
x = 1;// initialize answer
while (residual > tolerance){
f = x*x - D;
df = 2 * x;
dx = f/df;
x= x - dx;
residual = ABS(dx); // abs residual
it = it + 1; // increment iteration count
//printf("f: %f -tdx: %f -tresidual: %fn",f,dx,residual);
if (it == itermax){
//printf("tSQRT2(number,power) : SQRT2(%f) - iteration: %d -> ## The solution is not converged ##n",D,it);
break;
}
}
if (it < itermax){
//printf("tSQRT(number,power) - SQRT(%f,%f) : %f n",D,n, x);
return x;
}
}