[cig-commits] r19331 - mc/3D/CitcomCU/trunk/src

becker at geodynamics.org becker at geodynamics.org
Sat Jan 7 10:11:41 PST 2012


Author: becker
Date: 2012-01-07 10:11:40 -0800 (Sat, 07 Jan 2012)
New Revision: 19331

Modified:
   mc/3D/CitcomCU/trunk/src/Composition_adv.c
   mc/3D/CitcomCU/trunk/src/Convection.c
   mc/3D/CitcomCU/trunk/src/Instructions.c
   mc/3D/CitcomCU/trunk/src/Viscosity_structures.c
   mc/3D/CitcomCU/trunk/src/global_defs.h
   mc/3D/CitcomCU/trunk/src/prototypes.h
Log:
Added force_report function for stderr output for me == 0 regardless of verbose setting

replaced some calls with this function (same behavior)

made "ok..." statements upon startup consistent with version 1.0.0 again

added some memory allocation checks, including by calling safe_malloc to trace down failed 
program runs, presumably because of out of memory error with 513 x 513 x 127 elements times
100 markers per ele on 128 CPUs. 



Modified: mc/3D/CitcomCU/trunk/src/Composition_adv.c
===================================================================
--- mc/3D/CitcomCU/trunk/src/Composition_adv.c	2012-01-07 00:45:36 UTC (rev 19330)
+++ mc/3D/CitcomCU/trunk/src/Composition_adv.c	2012-01-07 18:11:40 UTC (rev 19331)
@@ -167,26 +167,25 @@
 
 	if(been == 0)
 	{
-		markers = E->advection.markers / 10;
-		asize = (markers + 1) * E->mesh.nsd * 2;
-		if( E->parallel.no_neighbors >= MAX_NEIGHBORS)
-		  myerror("error, number of neighbors out of bounds",E);
-		for(neighbor = 1; neighbor <= E->parallel.no_neighbors; neighbor++)
-		{
-			E->parallel.traces_transfer_index[neighbor] = (int *)malloc((markers + 1) * sizeof(int));
-
-			E->RVV[neighbor] = (float *)malloc(asize * sizeof(int));
-			E->RXX[neighbor] = (double *)malloc(asize * sizeof(double));
-			E->RINS[neighbor] = (int *)malloc((markers + 1) * (2 + E->tracers_add_flavors) * sizeof(int));
-			E->PVV[neighbor] = (float *)malloc(asize  * sizeof(int));
-			E->PXX[neighbor] = (double *)malloc(asize * sizeof(double));
-			E->PINS[neighbor] = (int *)malloc((markers + 1) * (2 + E->tracers_add_flavors) * sizeof(int));
-
-		}
-		E->traces_leave_index = (int *)malloc((markers + 1) * sizeof(int));
-		been++;
+	  markers = E->advection.markers / 10;
+	  asize = (markers + 1) * E->mesh.nsd * 2;
+	  if( E->parallel.no_neighbors >= MAX_NEIGHBORS)
+	    myerror("error, number of neighbors out of bounds",E);
+	  for(neighbor = 1; neighbor <= E->parallel.no_neighbors; neighbor++)
+	    {
+	      E->parallel.traces_transfer_index[neighbor] = (int *)safe_malloc((markers + 1) * sizeof(int));
+	      E->RVV[neighbor] = (float *)safe_malloc(asize * sizeof(int));
+	      E->RXX[neighbor] = (double *)safe_malloc(asize * sizeof(double));
+	      E->RINS[neighbor] = (int *)safe_malloc((markers + 1) * (2 + E->tracers_add_flavors) * sizeof(int));
+	      E->PVV[neighbor] = (float *)safe_malloc(asize  * sizeof(int));
+	      E->PXX[neighbor] = (double *)safe_malloc(asize * sizeof(double));
+	      E->PINS[neighbor] = (int *)safe_malloc((markers + 1) * (2 + E->tracers_add_flavors) * sizeof(int));
+	      
+	    }
+	  E->traces_leave_index = (int *)safe_malloc((markers + 1) * sizeof(int));
+	  been++;
 	}
-
+	
 	for(neighbor = 0; neighbor <= E->parallel.no_neighbors; neighbor++)
 		E->parallel.traces_transfer_number[neighbor] = 0;
 	if(on_off == 1)
@@ -529,8 +528,8 @@
 	if(been_here == 0)
 	{
 		been_here++;
-		element[0] = (int *)malloc((nel + 1) * sizeof(int));
-		element[1] = (int *)malloc((nel + 1) * sizeof(int));
+		element[0] = (int *)safe_malloc((nel + 1) * sizeof(int));
+		element[1] = (int *)safe_malloc((nel + 1) * sizeof(int));
 	}
 
 	for(el = 1; el <= nel; el++)

Modified: mc/3D/CitcomCU/trunk/src/Convection.c
===================================================================
--- mc/3D/CitcomCU/trunk/src/Convection.c	2012-01-07 00:45:36 UTC (rev 19330)
+++ mc/3D/CitcomCU/trunk/src/Convection.c	2012-01-07 18:11:40 UTC (rev 19331)
@@ -51,9 +51,11 @@
 void set_convection_defaults(struct All_variables *E)
 {
 
-  input_int("composition", &(E->control.composition), "0", E->parallel.me);
+  input_boolean("composition", &(E->control.composition), "0", E->parallel.me);
   input_int("tracers_add_flavors", &(E->tracers_add_flavors), "0", E->parallel.me);
   
+  input_boolean("tracers_assign_dense_only", &(E->tracers_assign_dense_only),"0",E->parallel.me);
+
 	if(E->control.composition)
 		E->next_buoyancy_field = PG_timestep_particle;
 	else
@@ -171,23 +173,45 @@
 void convection_initial_fields(struct All_variables *E)
 {
   int i,j;
-
+  if(E->parallel.me==0)fprintf(stderr,"ok16a\n");
 	if(E->control.composition)
 	{
+
+	  if(E->tracers_assign_dense_only){
+	    force_report(E,"WARNING: assigning only dense tracers, generally not a good idea!");
+	    E->advection.markers = E->advection.markers_per_ele * E->mesh.nel;
+
+	  }else{
 		E->advection.markers = E->advection.markers_per_ele * E->mesh.nel;
+	  }
 		E->advection.markers = E->advection.markers * E->lmesh.volume / E->mesh.volume;
 		E->advection.markers_uplimit = E->advection.markers * 2;
-		//fprintf(stderr, "aaaa %d %g %g\n", E->advection.markers, E->lmesh.volume, E->mesh.volume);
+		if(E->parallel.me == 0)fprintf(stderr, "amarkers: %d lmesh.volume %g volume %g\n", E->advection.markers, E->lmesh.volume, E->mesh.volume);
 		for(i = 1; i <= E->mesh.nsd; i++)
 		{
 			E->VO[i] = (float *)malloc((E->advection.markers_uplimit + 1) * sizeof(float));
+			if(!(E->VO[i]))myerror("Convection: mem error: E->V0",E);
+
 			E->Vpred[i] = (float *)malloc((E->advection.markers_uplimit + 1) * sizeof(float));
+			if(!(E->Vpred[i]))myerror("Convection: mem error: E->Vpred",E);
+
 			E->XMCpred[i] = (double *)malloc((E->advection.markers_uplimit + 1) * sizeof(double));
+			if(!(E->XMCpred[i]))myerror("Convection: mem error: E->XMCpred",E);
+
 			E->XMC[i] = (double *)malloc((E->advection.markers_uplimit + 1) * sizeof(double));
+			if(!(E->XMC[i]))myerror("Convection: mem error: E->XMC",E);
+
 			if(i==1){ /* those should only get allocated once */
 			  E->C12 = (int *)malloc((E->advection.markers_uplimit + 1) * sizeof(int));
+			  if(!(E->C12))myerror("Convection: mem error: E->C12",E);
+			  
 			  E->traces_leave = (int *)malloc((E->advection.markers_uplimit + 1) * sizeof(int));
+			  if(!(E->traces_leave))myerror("Convection: mem error: E->traces_leave",E);
+
 			  E->CElement = (int *)malloc((E->advection.markers_uplimit + 1) * sizeof(int));
+			  if(!(E->CElement))myerror("Convection: mem error: E->CElement",E);
+
+
 			  if(E->tracers_add_flavors){
 			    /* nodal compotional flavors */
 			    E->CF = (int **)malloc( E->tracers_add_flavors * sizeof(int *));
@@ -202,13 +226,17 @@
 			  }
 			}
 		}
+		if(E->parallel.me==0)fprintf(stderr,"ok16b\n");
 	}
 
 	report(E, "convection, initial temperature");
 #ifdef USE_GGRD
+	if(E->parallel.me==0)fprintf(stderr,"ok16c\n");
 	convection_initial_temperature_and_comp_ggrd(E);
+	if(E->parallel.me==0)fprintf(stderr,"ok16d1\n");
 #else
 	convection_initial_temperature(E);
+	if(E->parallel.me==0)fprintf(stderr,"ok16d2\n");
 #endif
 	return;
 }
@@ -585,13 +613,14 @@
 			}
 		} while(node < E->advection.markers);
 	}
-
+	
 	for(node = 1; node <= E->advection.markers; node++)
 	{
 		el = E->CElement[node];
-		dx = 1.0 / ((double)element[el]);
-		dr = 0.5 * dx;
-		j = (1 - E->CE[el]) * element[el];
+		// those were unused
+		//dx = 1.0 / ((double)element[el]);
+		//dr = 0.5 * dx;
+		//j = (1 - E->CE[el]) * element[el];
 		if(E->CE[el] < 0.5)
 			E->C12[node] = 0;
 		else
@@ -609,6 +638,7 @@
 */
 
 	}
+	
 	/* nodal values */
 	get_C_from_markers(E, E->C);
 	if(E->tracers_add_flavors)
@@ -652,7 +682,7 @@
 				  for(temp=0.0,j = 1; j <= ends; j++)
 				    temp += E->C[E->ien[el].node[j]];
 				  temp /= ends;
-				  if(temp >0.5)
+				  if(temp > 0.5)
 				    E->C12[ntracer] = 1;
 				  else
 				    E->C12[ntracer] = 0;

Modified: mc/3D/CitcomCU/trunk/src/Instructions.c
===================================================================
--- mc/3D/CitcomCU/trunk/src/Instructions.c	2012-01-07 00:45:36 UTC (rev 19330)
+++ mc/3D/CitcomCU/trunk/src/Instructions.c	2012-01-07 18:11:40 UTC (rev 19331)
@@ -77,81 +77,72 @@
 	 * ==================================================  */
 
 	setup_parser(E, argv[1]);
+	force_report(E,"ok1");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok1\n");
+	global_default_values(E);
+	force_report(E,"ok2");
 
-	global_default_values(E);
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok2\n");
 	read_initial_settings(E);
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok3\n");
+	force_report(E,"ok3");
+
 	(E->problem_derived_values) (E);	/* call this before global_derived_  */
 	global_derived_values(E);
+	force_report(E,"ok4");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok4\n");
 	parallel_domain_decomp1(E);
+	force_report(E,"ok5");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok5\n");
 	allocate_common_vars(E);
+	force_report(E,"ok6");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok6\n");
 	(E->problem_allocate_vars) (E);
 	(E->solver_allocate_vars) (E);
+	force_report(E,"ok6a");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok6a\n");
 	construct_ien(E);
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok9\n");
+	force_report(E,"ok9");
+
 	construct_masks(E);			/* order is important here */
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok10\n");
+	force_report(E,"ok10");
+
 	construct_id(E);
 	construct_lm(E);
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok11\n");
+	force_report(E,"ok11");
+
 	construct_sub_element(E);
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok12\n");
+	force_report(E,"ok12a");
 
 	node_locations(E);
+	force_report(E,"ok12b");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok7a\n");
-
 	construct_mat_group(E);
+	force_report(E,"ok12c");
 
 	(E->problem_boundary_conds) (E);
+	force_report(E,"ok12d");
+
 	check_bc_consistency(E);
+	force_report(E,"ok13");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok13\n");
-
 	parallel_shuffle_ele_and_id(E);
+	force_report(E,"ok14");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok14\n");
 	parallel_communication_routs(E);
 
 	construct_shape_functions(E);
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok15\n");
+	force_report(E,"ok15");
+
 	mass_matrix(E);
+	force_report(E,"ok15b");
+	
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok16\n");
+	//assign_surface_rayleigh(E); /* this has a proc wait loop in it  */
+
 	(E->problem_initial_fields) (E);	/* temperature/chemistry/melting etc */
+	force_report(E,"ok17");
 
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok17\n");
 	common_initial_fields(E);	/* velocity/pressure/viscosity (viscosity must be done LAST) */
-	if(E->parallel.me == 0)
-		fprintf(stderr, "ok18\n");
+	force_report(E,"ok18");
 
 	shutdown_parser(E);
 
@@ -1147,6 +1138,15 @@
 	}
 	return;
 }
+void force_report(struct All_variables *E, char *string)
+{
+	if(E->parallel.me == 0)
+	{
+		fprintf(stderr, "%s\n", string);
+		fflush(stderr);
+	}
+	return;
+}
 
 void record(struct All_variables *E, char *string)
 {

Modified: mc/3D/CitcomCU/trunk/src/Viscosity_structures.c
===================================================================
--- mc/3D/CitcomCU/trunk/src/Viscosity_structures.c	2012-01-07 00:45:36 UTC (rev 19330)
+++ mc/3D/CitcomCU/trunk/src/Viscosity_structures.c	2012-01-07 18:11:40 UTC (rev 19331)
@@ -1526,7 +1526,10 @@
       for(kk = 1; kk <= ends; kk++){
 	CC[kk] = E->C[E->ien[i].node[kk]];
 	if(E->control.check_c_irange){
-	  if(CC[kk] < 0)CC[kk]=0.0;if(CC[kk] > 1)CC[kk]=1.0;
+	  if(CC[kk] < 0)
+	    CC[kk]=0.0;
+	  if(CC[kk] > 1)
+	    CC[kk]=1.0;
 	}
       }
       for(jj = 1; jj <= vpts; jj++){

Modified: mc/3D/CitcomCU/trunk/src/global_defs.h
===================================================================
--- mc/3D/CitcomCU/trunk/src/global_defs.h	2012-01-07 00:45:36 UTC (rev 19330)
+++ mc/3D/CitcomCU/trunk/src/global_defs.h	2012-01-07 18:11:40 UTC (rev 19331)
@@ -96,8 +96,8 @@
 
 #define GGRD_MAX_NR_SLICE 5
 
-#define CU_MPI_MSG_LIM 100	/* this increase wasn't necessary */
-//#define CU_MPI_MSG_LIM 1000
+//#define CU_MPI_MSG_LIM 100	/* this increase wasn't necessary */
+#define CU_MPI_MSG_LIM 1000
 
 /* Macros */
 
@@ -960,6 +960,7 @@
   int tracers_add_flavors;
   int *tmaxflavor;
 
+  int tracers_assign_dense_only;
 	int *RG[4];
 	double *XRG[4];
 	double *XP[4], XG1[4], XG2[4];

Modified: mc/3D/CitcomCU/trunk/src/prototypes.h
===================================================================
--- mc/3D/CitcomCU/trunk/src/prototypes.h	2012-01-07 00:45:36 UTC (rev 19330)
+++ mc/3D/CitcomCU/trunk/src/prototypes.h	2012-01-07 18:11:40 UTC (rev 19331)
@@ -202,6 +202,7 @@
 void read_initial_settings(struct All_variables *);
 void check_bc_consistency(struct All_variables *);
 void set_up_nonmg_aliases(struct All_variables *);
+void force_report(struct All_variables *, char *);
 void report(struct All_variables *, char *);
 void record(struct All_variables *, char *);
 void common_initial_fields(struct All_variables *);



More information about the CIG-COMMITS mailing list