[MOAB-dev] r2624 - MOAB/trunk

Tim Tautges tautges at mcs.anl.gov
Tue Feb 3 11:48:26 CST 2009


Jane,
   Please re-add the op option, but have it default to sum.  I'd like to 
preserve this option for other uses.

- tim

janehu at mcs.anl.gov wrote:
> Author: janehu
> Date: 2009-02-03 11:42:41 -0600 (Tue, 03 Feb 2009)
> New Revision: 2624
> 
> Modified:
>    MOAB/trunk/ReadNCDF.cpp
> Log:
> Modified update function for Paul's exodus file with time_step. It's clear the format is to keep original coordinates, while each time_step shows the deformation on each direction. So removed the op in the tdata because we know it's going to do sum instead of copy.
> 
> Modified: MOAB/trunk/ReadNCDF.cpp
> ===================================================================
> --- MOAB/trunk/ReadNCDF.cpp	2009-02-03 15:50:57 UTC (rev 2623)
> +++ MOAB/trunk/ReadNCDF.cpp	2009-02-03 17:42:41 UTC (rev 2624)
> @@ -1918,13 +1918,13 @@
>    //Function : updating current database from new exodus_file. 
>    //Creator:   Jane Hu
>    //opts is currently designed as following
> -  //tdata = <var_name>[, time][,op][,destination] 
> +  //tdata = <var_name>[, time][,destination] 
> +  //Since deformed mesh will have original coordx, coordy and coordz, and at each 
> +  //time_step, a deformation on each direction, so update will sum them to get the new coords
>    //where var_name show the tag name to be updated, this version just takes
>    //coord.
>    //time is the optional, and it gives time step of each of the mesh
>    //info in exodus file. 
> -  //op is the operation that is going to be performed on the var_name info.
> -  //currently support 'copy' and 'sum'
>    //destination shows where to store the updated info, currently assume it is
>    //stored in the same database by replacing the old info.
>    MBErrorCode rval;
> @@ -1968,15 +1968,7 @@
>          return MB_TYPE_OUT_OF_RANGE;
>      }
>  
> -    //2. check for the operations, they can be copy or sum.
> -    const char *op = "" ;
> -    if(tokens.size() > 2 && !tokens[2].empty())
> -      op = tokens[2].c_str();
> -
> -    if(!(!strcmp(op, "copy") || !strcmp( op ,"sum")))
> -      return MB_TYPE_OUT_OF_RANGE;
> -
> -    //3. match the node_num_map.
> +    //2. match the node_num_map.
>      int*    ptr1 = new int [numberNodes_loading];
>      int*    ptr2 ;
>  
> @@ -2001,24 +1993,30 @@
>  
>      //read in the coordinates from the database.
>      MBEntityHandle node_handle = 0;
> -    std::vector<double*> arrays, arrays_DB;
> +    std::vector<double*> arrays, deform_arrays ;
> +    double*    array1 = new double [numberNodes_loading];
> +    double*    array2 = new double [numberNodes_loading];
> +    double*    array3 = new double [numberNodes_loading];
> +    deform_arrays.push_back(array1);
> +    deform_arrays.push_back(array2);
> +    deform_arrays.push_back(array3);
> +
>      readMeshIface->get_node_arrays(3, numberNodes_loading,
>        MB_START_ID, node_handle, arrays);
>  
>      // read in the coordinates from the exodus file
> -    NcVar *coords = ncFile->get_var("coord");
> -    if (NULL == coords || !coords->is_valid()) {
> +    NcVar *coordx = ncFile->get_var("vals_nod_var1");
> +    NcVar *coordy = ncFile->get_var("vals_nod_var2");
> +    NcVar *coordz;
> +    if(numberDimensions_loading == 3)
> +      ncFile->get_var("vals_nod_var3");
> +    if (NULL == coordx || !coordx->is_valid() ||
> +        NULL == coordy || !coordy->is_valid() ||
> +        (numberDimensions_loading == 3 && (NULL == coordz || !coordz->is_valid())) ) {
>        readMeshIface->report_error("MBCN:: Problem getting coords variable.");
>        return MB_FAILURE;
>      }
>  
> -    if(!strcmp(op ,"sum"))
> -    {
> -      //record the DB coords.
> -      readMeshIface->get_node_arrays(3, numberNodes_loading,
> -        MB_START_ID, node_handle, arrays_DB);
> -    }
> -
>      //do operations on all coordinates.
>      for(int node_num = 0; node_num < numberNodes_loading; )
>      {
> @@ -2048,47 +2046,39 @@
>            num_of_nodes = j;
>            break;
>          }    
> -      NcBool status = coords->get(arrays[0], node_index1+1, num_of_nodes);
> +
> +      int offset = time_step * numberNodes_loading;
> +
> +      NcBool status = coordx->get(deform_arrays[0], offset+node_index1+1, num_of_nodes);
>        if (0 == status) {
>          readMeshIface->report_error("MBCN:: Problem getting x coord array.");
>          return MB_FAILURE;
>        }
> -      status = coords->set_cur(1, 0);
> +      status = coordy->get(deform_arrays[1], offset+node_index1+1, num_of_nodes);
>        if (0 == status) {
>          readMeshIface->report_error("MBCN:: Problem getting y coord array.");
>          return MB_FAILURE;
>        }
> -      status = coords->get(arrays[1], node_index1+1, num_of_nodes);
> -      if (0 == status) {
> -        readMeshIface->report_error("MBCN:: Problem getting y coord array.");
> -        return MB_FAILURE;
> -      }
>        if (numberDimensions_loading == 3 )
>        {
> -        status = coords->set_cur(2, 0);
> +        status = coordz->get(deform_arrays[2], offset+node_index1+1, num_of_nodes);
>          if (0 == status) {
>            readMeshIface->report_error("MBCN:: Problem getting z coord array.");
>            return MB_FAILURE;
>          }
> -        status = coords->get(arrays[2], node_index1+1, num_of_nodes);
> -        if (0 == status) {
> -          readMeshIface->report_error("MBCN:: Problem getting z coord array.");
> -          return MB_FAILURE;
> -        }
>        }    
>        node_num += num_of_nodes;
>      }
> -
> -    delete [] ptr1;
> -    if(!strcmp(op ,"sum"))
> +    for(int i = 0; i < numberNodes_loading; i++)
>      {
> -      for(int i = 0 ; i < numberNodes_loading; i++)
> -      {
> -        arrays[0][i] += arrays_DB[0][i];
> -        arrays[1][i] += arrays_DB[1][i];
> -        arrays[2][i] += arrays_DB[2][i];
> -      }
> +      arrays[0][i] += deform_arrays[0][i];
> +      arrays[1][i] += deform_arrays[1][i];
> +      arrays[2][i] += deform_arrays[2][i];
>      }
> +    delete [] ptr1;
> +    delete [] array1;
> +    delete [] array2;
> +    delete [] array3;
>    } //if token[0] == "coord"
>  }
>  
> 
> 

-- 
================================================================
"You will keep in perfect peace him whose mind is
   steadfast, because he trusts in you."               Isaiah 26:3

              Tim Tautges            Argonne National Laboratory
          (tautges at mcs.anl.gov)      (telecommuting from UW-Madison)
          phone: (608) 263-8485      1500 Engineering Dr.
            fax: (608) 263-4499      Madison, WI 53706



More information about the moab-dev mailing list