Esempio n. 1
0
void enkf_tui_export_fieldP(void * arg) {
  enkf_main_type * enkf_main                   = enkf_main_safe_cast( arg );
  const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main);
  const enkf_config_node_type * config_node    = enkf_tui_util_scanf_key(ensemble_config , PROMPT_LEN ,  FIELD  , INVALID_VAR );
  int iens1                                    = 0;
  int iens2                                    = enkf_main_get_ensemble_size( enkf_main );
  const int last_report                        = enkf_main_get_history_length( enkf_main );
  int report_step                              = util_scanf_int_with_limits("Report step: ", PROMPT_LEN , 0 , last_report);
  double lower_limit                           = util_scanf_double("Lower limit", PROMPT_LEN);
  double upper_limit                           = util_scanf_double("Upper limit", PROMPT_LEN);
  char * export_file;
  util_printf_prompt("Filename to store file: " , PROMPT_LEN , '=' , "=> ");
  export_file = util_alloc_stdin_line();
  {
    enkf_fs_type   * fs        = enkf_main_tui_get_fs(enkf_main);
    enkf_node_type ** ensemble = enkf_node_load_alloc_ensemble( config_node , fs , report_step , iens1 , iens2 );
    enkf_node_type *  sum      = enkf_node_alloc( config_node );
    int active_ens_size        = 0;
    int iens;

    enkf_node_clear( sum );
    {
      /* OK going low level */
      field_type * sum_field = (field_type *) enkf_node_value_ptr( sum );

      for (iens = iens1; iens < iens2; iens++) {
        if (ensemble[iens - iens1] != NULL) {
          field_type * field     = (field_type *) enkf_node_value_ptr( ensemble[iens - iens1] );
          field_update_sum( sum_field , field , lower_limit , upper_limit);
          active_ens_size++;
        }
      }
      if (active_ens_size > 0) {
        field_scale( sum_field , 1.0 / active_ens_size );
        {
          char * path;
          util_alloc_file_components( export_file , &path , NULL , NULL);
          if (path != NULL) {
            util_make_path( path );
            free( path );
          }
        }
        field_export(sum_field , export_file , NULL , RMS_ROFF_FILE , false, NULL);
      } else fprintf(stderr,"Warning: no data found \n");
    }

    for (iens = iens1; iens < iens2; iens++) {
      if (ensemble[iens - iens1] != NULL)
        enkf_node_free( ensemble[iens - iens1] );
    }

    free( ensemble );
    enkf_node_free( sum );
  }
  free( export_file );
}
Esempio n. 2
0
extern int plot(opt_t *opt)
{
  int err = ERROR_BUG;

#ifndef HAVE_GETRUSAGE

  /* simple timer */

  clock_t c0, c1;
  c0 = clock();

#endif

#ifdef HAVE_GETTIMEOFDAY

  /* high resolution elapsed time */

  struct timeval tv0;

  gettimeofday(&tv0, NULL);

#endif

#ifdef HAVE_PTHREAD_H

  if (opt->v.verbose)
    {
      printf("using %i thread%s\n", opt->v.threads,
	     (opt->v.threads == 1 ? "" : "s"));
    }

#endif

  if (opt->test != test_none)
    {
      /* test field */

      switch (opt->test)
	{
	case test_circular:
	  TFMSG("circular");
	  err = plot_circular(opt);
	  break;
	case test_electro2:
	  TFMSG("two-point electrostatic");
	  err = plot_electro2(opt);
	  break;
	case test_electro3:
	  TFMSG("three-point electrostatic");
	  err = plot_electro3(opt);
	  break;
	case test_cylinder:
	  TFMSG("cylindrical flow");
	  err = plot_cylinder(opt);
	  break;
	default:
	  err = ERROR_BUG;
	}
    }
  else
    {
      /* data field */

      if (opt->v.verbose)
	{
	  int i;

	  printf("reading field from\n");

	  for (i=0 ; i<opt->input.n ; i++)
	    {
	      printf("  %s\n", opt->input.file[i]);
	    }
	}

      field_t *field = field_read(opt->input.format,
				  opt->input.n,
				  opt->input.file);

      if (!field)
	{
	  fprintf(stderr, "failed to read field\n");
	  return ERROR_READ_OPEN;
	}

      /* this needs to be in libvfplot */

      field_scale(field, opt->v.arrow.scale);

      domain_t* dom;

      if (opt->domain.file)
	dom = domain_read(opt->domain.file);
      else
	dom = field_domain(field);

      if (!dom)
	{
	  fprintf(stderr, "no domain\n");
	  return ERROR_BUG;
	}

      err = plot_generic(dom, (vfun_t)fv_field, (cfun_t)fc_field, (void*)field, opt);

      field_destroy(field);
      domain_destroy(dom);
    }

#ifdef HAVE_STAT

  /* if success then stat the output file */

  if (err == ERROR_OK)
    {
      struct stat sb;

      if ((opt->v.file.output.path != NULL) &&
	  (stat(opt->v.file.output.path, &sb) != 0))
	{
	  fprintf(stderr,
		  "problem with %s : %s\n",
		  opt->v.file.output.path,
		  strerror(errno));
	}
      else
	{
	  if (opt->v.verbose)
	    printf("wrote %li bytes to %s\n",
		   (long)sb.st_size,
		   opt->v.file.output.path);
	}
    }

#endif

  if (opt->v.verbose)
    {

#ifdef HAVE_GETRUSAGE

      /* datailed stats on POSIX systems */

      struct rusage usage;

      if (getrusage(RUSAGE_SELF, &usage) == 0)
	{
	  double
	    user = usage.ru_utime.tv_sec + (double)usage.ru_utime.tv_usec/1e6,
	    sys  = usage.ru_stime.tv_sec + (double)usage.ru_stime.tv_usec/1e6;

	  printf("CPU time %.3f s (user) %.3f s (system)\n", user, sys);
	}
      else
	{
	  fprintf(stderr, "no usage stats (not fatal) ; error %s\n", strerror(errno));
	}

#else

      /* simple stats on C89 systems */
      c1 = clock();

      double wall = ((double)(c1 - c0))/(double)CLOCKS_PER_SEC;

      printf("CPU time %.3f s\n", wall);

#endif

#ifdef HAVE_GETTIMEOFDAY

      struct timeval tv1, dtv;

      gettimeofday(&tv1, NULL);
      timeval_subtract(&dtv, &tv1, &tv0);

      printf("elapsed time %ld.%03ld s\n", dtv.tv_sec, dtv.tv_usec/1000);

#endif
    }


  return err;
}
int main(int argc , char ** argv) {
  enkf_main_install_SIGNALS();

  const char * config_file = argv[1];
  const char * init_file   = argv[2];
  const char * key         = "PORO";
  int iens                 = 0;

  ert_test_context_type * test_context         = ert_test_context_alloc("ExportInactiveCellsTest" , config_file);
  enkf_main_type * enkf_main                   = ert_test_context_get_main(test_context);
  enkf_fs_type * fs                            = enkf_main_get_fs(enkf_main);
  const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main);
  const enkf_config_node_type * config_node    = ensemble_config_get_node(ensemble_config , key);
  const field_config_type * field_config       = enkf_config_node_get_ref( config_node );
  enkf_state_type * state                      = enkf_main_iget_state( enkf_main , iens );
  enkf_node_type * field_node                  = enkf_state_get_node( state , key );
  field_type * field                           = enkf_node_value_ptr(field_node);

  {
    forward_initialize_node(enkf_main, init_file, field_node);
    node_id_type node_id = {.report_step = 0 , .iens = iens , .state = BOTH };
    test_assert_true(enkf_node_try_load(field_node , fs , node_id));
    field_scale(field, 3.0);
  }

  int nx,ny,nz;
  field_config_get_dims(field_config , &nx , &ny , &nz);
  const char * export_file_grdecl = "my_test_dir/exported_field_test_file_grdecl";
  const char * export_file_roff   = "my_test_dir/exported_field_test_file_roff";
  field_file_format_type file_type;

  char * found_init_file = enkf_main_alloc_abs_path_to_init_file(enkf_main, config_node);
  {
    file_type = ECL_GRDECL_FILE;
    field_export(field, export_file_grdecl, NULL, file_type, false, found_init_file);
    check_exported_data(export_file_grdecl, init_file, file_type, field_config, field, nx, ny, nz);
  }
  {
    file_type = RMS_ROFF_FILE;
    field_export(field, export_file_roff, NULL, file_type, false, found_init_file);
    check_exported_data(export_file_roff, init_file, file_type, field_config, field, nx, ny, nz);
  }

  free(found_init_file);
  found_init_file = NULL;
  {
    file_type = ECL_GRDECL_FILE;
    field_export(field, export_file_grdecl, NULL, file_type, false, found_init_file);
    check_exported_data(export_file_grdecl, found_init_file, file_type, field_config, field, nx, ny, nz);
  }
  {
    file_type = RMS_ROFF_FILE;
    field_export(field, export_file_roff, NULL, file_type, false, found_init_file);
    check_exported_data(export_file_roff, found_init_file, file_type, field_config, field, nx, ny, nz);
  }



  ert_test_context_free(test_context);
  exit(0);
}