48 #define MIN_T_DIAG_NEGATIVE_INDEX -20
50 #define MIN_T_DIAG 1.0e-10
119 long j,je,line_index,polygon2_index;
120 double eta1,eta2,t_coeff,coeff,dist;
130 if (dirichlet->element[polygon2_index]<=cond_dirichlet) {
132 eta1=water_surface_elevation->element[i];
133 eta2=water_surface_elevation->element[polygon2_index];
138 coeff=-param->
dt*t_coeff*(eta->element[polygon2_index]-eta->element[i])/dist;
295 return (
wet_area(eta_v->element[i],i,param->
deta)*x->element[i]);
297 return (x->element[i]);
394 char *function_name=
"Newton_convergence";
398 double x_temp_max,x_temp_adm=param->
x_temp_adm;
403 #ifdef WRITE_ITERATION_NUMBER
407 double volume_term=0.0,be_term=0.0;
408 FILE_LOG=fopen(LOG_FILE_NAME,
"a");
410 double initial_residual;
414 for(i=eta_v->
nl;i<=eta_v->nh;i++) {
416 volume_term=
volume(eta_v->element[i],i);
417 be_term=be0->element[i];
421 be->element[i]=eta_v->element[i]-water_surface_elevation->element[i];
424 be->element[i]=
volume(eta_v->element[i],i)-
volume(dirichlet->element[i],i);
437 for (i=eta_v->
nl;i<=eta_v->nh;i++) {
442 for(i=eta_v->
nl;i<=eta_v->nh;i++) {
446 be->element[i]=
volume(eta_v->element[i],i)-
volume(dirichlet->element[i],i);
465 elapsed=(double)((time_1-time_0)/CLOCKS_PER_SEC);
467 #ifdef WRITE_ITERATION_NUMBER
468 fprintf(FILE_LOG,
"%ld,",kkm);
471 for (i=x_temp->
nl;i<=x_temp->nh;i++) {
472 if (x_temp->element[i]<0.0) {
476 x_temp->element[i]=0.0;
481 for(i=x_temp->
nl;i<=x_temp->nh;i++) {
483 eta_v->element[i]=eta_v->element[i]-x_temp->element[i];
490 for(i=eta_v->
nl;i<=eta_v->nh;i++) {
500 residual->element[i]=
volume(eta_v->element[i],i)-
volume(dirichlet->element[i],i);
538 }
while (max_b>newton_toll);
541 #ifdef WRITE_ITERATION_NUMBER
542 fprintf(FILE_LOG,
" %ld \n",newton_cnt);
548 int time_loop(
short print,
int (*write_output)(
void *v1,
void *v2)){
569 double t_end=param->
t_end;
578 char SSSS[ ]={
"SSSS"};
582 for (i=x->
nl;i<=x->nh;i++) {
594 for (i=t_diagonal->
nl;i<=t_diagonal->nh;i++) {
595 t_diagonal->element[i]=0.0;
596 t_diagonal_no_dirichlet->element[i]=0.0;
606 for (i=sources->
nl;i<=sources->nh;i++) {
607 sources->element[i]=0.0;
620 for (i=dirichlet->
nl;i<=dirichlet->nh;i++) {
626 printf(
"water_table_surface_elevation cells:%ld\n",water_surface_elevation->
nh);
629 while ((t>=t_start) && (t<=t_end)) {
639 for (i=water_surface_elevation->
nl;i<=water_surface_elevation->nh;i++){
640 eta_v->element[i]=water_surface_elevation->element[i];
643 if (sources->element[i]>0.0) eta_v->element[i]=elevation_bottom_bottom->element[i]+sources->element[i]*dt;
645 if (dirichlet->element[i]>param->
null_dirichlet) eta_v->element[i]=dirichlet->element[i];
648 if (water_depth==NULL) {
663 if (water_depth!=NULL) {
664 printf(
"Warning: volumes at the nodes were calculated according to water depth value. Water depth values are now deleting \n");
676 for (i=water_surface_elevation->
nl;i<=water_surface_elevation->nh;i++){
678 water_surface_elevation->element[i]=eta_v->element[i];
679 water_mass_error->element[i]=be->element[i];
681 if (print==1) printf(
"Time_loop function: time %le [%le,%le] executed with %ld iterations \n",t,t_start,t_end,kks);
682 if ((
long)t%(
long)dt_print==0) {
685 lt=(long)(t/dt_print);
691 s=(*write_output)((
void *)fn,(
void *)SSSS);
692 if (s!=0) printf(
"Error in time_loop: results at %s was not correctly written (exit %d)",SSSS,s);
698 if (dirichlet_times!=NULL)
free_s_times(dirichlet_times);
708 if (print==1) printf (
"Function time_loop was successfully executed!! ");
767 if ((l==0) && (s==0)) {
772 printf (
"Error in write_map_results l=%d s=%d \n ",l,s);
791 if (!fn)
t_error(
"Fn (OUTPUT_FILENAMES) was not allocated");
796 if (print==1) printf(
"OUTPUT_FILENAMES was successfully initialized file_results: %s file_error: %s !! \n",fn->
file_result,fn->
file_error);