/* * NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM * * Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide. * * Tecplot hereby grants OpenCFD limited authority to distribute without * alteration the source code to the Tecplot Input/Output library, known * as TecIO, as part of its distribution of OpenFOAM and the * OpenFOAM_to_Tecplot converter. Users of this converter are also hereby * granted access to the TecIO source code, and may redistribute it for the * purpose of maintaining the converter. However, no authority is granted * to alter the TecIO source code in any form or manner. * * This limited grant of distribution does not supersede Tecplot, Inc.'s * copyright in TecIO. Contact Tecplot, Inc. for further information. * * Tecplot, Inc. * 3535 Factoria Blvd, Ste. 550 * Bellevue, WA 98006, USA * Phone: +1 425 653 1200 * http://www.tecplot.com/ * */ #include "stdafx.h" #include "MASTER.h" #define TECPLOTENGINEMODULE /* ****************************************************************** ****************************************************************** ******* ******** ****** (C) 1988-2008 Tecplot, Inc. ******* ******* ******** ****************************************************************** ****************************************************************** */ #define DATASETMODULE #include "GLOBAL.h" #include "TASSERT.h" #include "Q_UNICODE.h" #include "STRUTIL.h" #include "AUXDATA.h" #include "ARRLIST.h" #include "STRLIST.h" #include "ALLOC.h" #include "SET.h" #include "DATASET.h" #include "FILESTREAM.h" #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif #include "DATASET0.h" #include #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #if !defined ENGINE /* TODO(RMS)-H 12/12/2005: ENGINE: refactor to use just the Interrupted flag as-is */ #else #endif #endif #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #if !defined USE_MACROS_FOR_FUNCTIONS #endif #if !defined USE_MACROS_FOR_FUNCTIONS #endif #endif /* TECPLOTKERNEL */ /** * Cleanout the contents of the zone spec item but leaves the zone spec item. * This effectively leaves the zone spec structure in the same state as calling * ZoneSpecAlloc initially. * * param ZoneSpec * Zone spec item to cleanup. */ void CleanoutZoneSpec(ZoneSpec_s *ZoneSpec) { REQUIRE(VALID_REF(ZoneSpec)); if (ZoneSpec->Name != NULL) FREE_ARRAY(ZoneSpec->Name, "ZoneSpec name"); if (ZoneSpec->AuxData != NULL) AuxDataDealloc(&ZoneSpec->AuxData); SetZoneSpecDefaults(ZoneSpec); } /** */ void ZoneSpecDealloc(ZoneSpec_s **ZoneSpec) { REQUIRE(VALID_REF(ZoneSpec)); REQUIRE(VALID_REF(*ZoneSpec) || *ZoneSpec == NULL); if (*ZoneSpec != NULL) { CleanoutZoneSpec(*ZoneSpec); FREE_ITEM(*ZoneSpec, "ZoneSpec structure"); *ZoneSpec = NULL; } ENSURE(*ZoneSpec == NULL); } /** */ Boolean_t ZoneSpecItemDestructor(void *ItemRef, ArbParam_t ClientData) { ZoneSpec_s **ZoneSpecRef = (ZoneSpec_s **)ItemRef; REQUIRE(VALID_REF(ZoneSpecRef)); REQUIRE(VALID_REF(*ZoneSpecRef) || *ZoneSpecRef == NULL); if (*ZoneSpecRef != NULL) ZoneSpecDealloc(ZoneSpecRef); ENSURE(*ZoneSpecRef == NULL); return TRUE; } /** */ void SetZoneSpecDefaults(ZoneSpec_s *ZoneSpec) { REQUIRE(VALID_REF(ZoneSpec)); ZoneSpec->Name = NULL; ZoneSpec->UniqueID = INVALID_UNIQUE_ID; ZoneSpec->ParentZone = BAD_SET_VALUE; ZoneSpec->StrandID = STRAND_ID_STATIC; ZoneSpec->SolutionTime = 0.0; ZoneSpec->NumPtsI = 0; ZoneSpec->NumPtsJ = 0; ZoneSpec->NumPtsK = 0; ZoneSpec->ICellDim = 0; // ...currently not used ZoneSpec->JCellDim = 0; // ...currently not used ZoneSpec->KCellDim = 0; // ...currently not used ZoneSpec->Type = ZoneType_Ordered; ZoneSpec->ZoneLoadInfo.PresetZoneColor = NoColor_C; ZoneSpec->ZoneLoadInfo.IsInBlockFormat = TRUE; ZoneSpec->AuxData = NULL; ZoneSpec->BuildZoneOptInfo = TRUE; /* classic data only */ ZoneSpec->FNMode = FaceNeighborMode_LocalOneToOne; ZoneSpec->FNAreCellFaceNbrsSupplied = FALSE; /* polytope data only */ ZoneSpec->NumFaceNodes = 0; ZoneSpec->NumFaceBndryFaces = 0; ZoneSpec->NumFaceBndryItems = 0; } #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif /* TECPLOTKERNEL */ /** */ void ZoneSpecExcludeBndryConnsFromMetrics(ZoneSpec_s* ZoneSpec) { REQUIRE(VALID_REF(ZoneSpec)); /* classic data face connectivity fixup (leave FNMode as-is) */ ZoneSpec->FNAreCellFaceNbrsSupplied = FALSE; // ...if we invalidate boundary connections CellFaceNbrs must now be auto-generated /* polytope data face connectivity fixup */ ZoneSpec->NumFaceBndryFaces = 0; ZoneSpec->NumFaceBndryItems = 0; } /** */ ZoneSpec_s *ZoneSpecAlloc(void) { ZoneSpec_s *Result; Result = (ZoneSpec_s *)ALLOC_ITEM(ZoneSpec_s, "ZoneSpec structure"); if (Result != NULL) SetZoneSpecDefaults(Result); ENSURE(Result == NULL || VALID_REF(Result)); return Result; } #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #endif /** * Adjusts the capacity request as necessary to minimize memory reallocations * for large lists. The adjusted capacity will be at least as big as requested * however it may be larger if it is determined that the space requirement is * growing faster. * * param ZoneOrVarArrayList * Array list requesting the change in capacity. * param CurrentCapacity * Current capacity of the array list. * param RequestedCapacity * Capacity request or zero for default size. * param ClientData * Any client data needed for the adjustment. * * return * Adjusted capacity that is at least as large as the request or zero if * unable to satisfy the requested capacity. */ LgIndex_t ZoneOrVarListAdjustCapacityRequest(ArrayList_pa ZoneOrVarArrayList, LgIndex_t CurrentCapacity, LgIndex_t RequestedCapacity, ArbParam_t ClientData) { LgIndex_t Result; REQUIRE(ArrayListIsValid(ZoneOrVarArrayList)); REQUIRE((RequestedCapacity == 0 && CurrentCapacity == 0) || RequestedCapacity > CurrentCapacity); REQUIRE(CurrentCapacity <= MaxNumZonesOrVars); if (RequestedCapacity <= MaxNumZonesOrVars) { if (RequestedCapacity != 0 && CurrentCapacity == 0) { /* first allocation; assume the request is the desired capacityy */ Result = RequestedCapacity; } else { const LgIndex_t DEFAULT_CAPACITY = 32; LgIndex_t BlockSize = MAX(DEFAULT_CAPACITY, CurrentCapacity / 2); if (RequestedCapacity == 0) Result = DEFAULT_CAPACITY; else Result = ((RequestedCapacity - 1) / BlockSize + 1) * BlockSize; /* put a cap on the maximum */ if (Result > MaxNumZonesOrVars) Result = MaxNumZonesOrVars; } } else Result = 0; /* request exceeded maximum; unable to satisfy request */ ENSURE(Result == 0 || Result >= RequestedCapacity); ENSURE(Result <= MaxNumZonesOrVars); return Result; } #if defined TECPLOTKERNEL /* CORE SOURCE CODE REMOVED */ #if !defined USE_MACROS_FOR_FUNCTIONS #endif # if defined DEBUGUNIQUE # endif #endif /* TECPLOTKERNEL */