[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