LCOV - code coverage report
Current view: top level - algs/CoreGen/meshkit - CoreGen.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 4 8 50.0 %
Date: 2020-07-01 15:24:36 Functions: 2 4 50.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : //-----------------------------------C++-------------------------------------//
       2                 :            : // File: src/algs/meshkit/CoreGen.hpp
       3                 :            : //
       4                 :            : // Brief: CoreGen class definition:
       5                 :            : //        Creates reactor core model from input mesh files
       6                 :            : //         class, CoreGen
       7                 :            : //---------------------------------------------------------------------------//
       8                 :            : 
       9                 :            : #ifndef MESHKIT_COREGEN_HPP
      10                 :            : #define MESHKIT_COREGEN_HPP
      11                 :            : 
      12                 :            : 
      13                 :            : #define STRINGIFY_(X) #X
      14                 :            : #define STRINGIFY(X) STRINGIFY_(X)
      15                 :            : #define COREGEN_DEFAULT_TEST_FILE  "coregen_default"
      16                 :            : #define CTEST_FILE_NAME "coregen_default"
      17                 :            : 
      18                 :            : #include <cassert>
      19                 :            : #include <string>
      20                 :            : #include <vector>
      21                 :            : #include <set>
      22                 :            : 
      23                 :            : #include "meshkit/Types.hpp"
      24                 :            : #include "meshkit/Error.hpp"
      25                 :            : #include "meshkit/MeshScheme.hpp"
      26                 :            : #include "meshkit/ModelEnt.hpp"
      27                 :            : #include "meshkit/MKCore.hpp"
      28                 :            : #include "meshkit/SizingFunction.hpp"
      29                 :            : #include "meshkit/RegisterMeshOp.hpp"
      30                 :            : 
      31                 :            : #include "meshkit/LocalSet.hpp"
      32                 :            : #include "meshkit/LocalTag.hpp"
      33                 :            : #include "meshkit/Matrix.hpp"
      34                 :            : 
      35                 :            : #include "meshkit/iMesh.hpp"
      36                 :            : #include "meshkit/iGeom.hpp"
      37                 :            : #include "MBCN.h"
      38                 :            : 
      39                 :            : #include "meshkit/vectortemplate.hpp"
      40                 :            : #include "meshkit/matrixtemplate.hpp"
      41                 :            : #include "meshkit/parser.hpp"
      42                 :            : #include "meshkit/SimpleArray.hpp"
      43                 :            : #include "meshkit/clock.hpp"
      44                 :            : #include "meshkit/mstream.hpp"
      45                 :            : 
      46                 :            : #include "iMesh_extensions.h"
      47                 :            : #include "MBiMesh.hpp"
      48                 :            : #include "moab/Interface.hpp"
      49                 :            : #include "moab/Range.hpp"
      50                 :            : #include "moab/Skinner.hpp"
      51                 :            : #include "MBTagConventions.hpp"
      52                 :            : #include "moab/MergeMesh.hpp"
      53                 :            : 
      54                 :            : 
      55                 :            : #ifdef USE_MPI
      56                 :            : #include "mpi.h"
      57                 :            : #include "iMeshP.h"
      58                 :            : #include "moab_mpi.h"
      59                 :            : #include "moab/ParallelMergeMesh.hpp"
      60                 :            : #include "moab/ParallelComm.hpp"
      61                 :            : #include "MBParallelConventions.h"
      62                 :            : #endif
      63                 :            : 
      64                 :            : #include "meshkit/CopyGeom.hpp"
      65                 :            : #include "meshkit/CopyMesh.hpp"
      66                 :            : #include "meshkit/ExtrudeMesh.hpp"
      67                 :            : #include "meshkit/CESets.hpp"
      68                 :            : 
      69                 :            : namespace MeshKit {
      70                 :            : 
      71                 :            :   class MKCore;
      72                 :            : 
      73                 :            :   class CoreGen : public MeshScheme
      74                 :            :   {
      75                 :            :   public:
      76                 :            :     /* \brief Constructor
      77                 :            :      *
      78                 :            :      * Create a new CoreGen instance
      79                 :            :      * \param impl the iGeom instance handle for the Geom
      80                 :            :      */
      81                 :            :     CoreGen(MKCore *mk, const MEntVector &me_vec);
      82                 :            : 
      83                 :            :     /* \brief Destructor
      84                 :            :      */
      85                 :            :     virtual ~CoreGen();
      86                 :            : 
      87                 :            :     /**\brief Get class name */
      88                 :            :     static const char* name();
      89                 :            : 
      90                 :            :     /**\brief Function returning whether this scheme can mesh entities of t
      91                 :            :      *        the specified dimension.
      92                 :            :      *\param dim entity dimension
      93                 :            :      */
      94                 :            :     static bool can_mesh(iBase_EntityType dim);
      95                 :            : 
      96                 :            :     /** \brief Function returning whether this scheme can mesh the specified entity
      97                 :            :      *
      98                 :            :      * Used by MeshOpFactory to find scheme for an entity.
      99                 :            :      * \param me ModelEnt being queried
     100                 :            :      * \return If true, this scheme can mesh the specified ModelEnt
     101                 :            :      */
     102                 :            :     static bool can_mesh(ModelEnt *me);
     103                 :            : 
     104                 :            :     /**\brief Get list of mesh entity types that can be generated.
     105                 :            :      *\return array terminated with \c moab::MBMAXTYPE
     106                 :            :      */
     107                 :            :     static const moab::EntityType* output_types();
     108                 :            : 
     109                 :            :     /** \brief Return the mesh entity types operated on by this scheme
     110                 :            :      * \return array terminated with \c moab::MBMAXTYPE
     111                 :            :      */
     112                 :            :     virtual const moab::EntityType* mesh_types_arr() const;
     113                 :            : 
     114                 :            :     /** \brief Re-implemented here so we can check topological dimension of model_ent
     115                 :            :      * \param model_ent ModelEnt being added
     116                 :            :      */
     117                 :            :     virtual bool add_modelent(ModelEnt *model_ent);
     118                 :            : 
     119                 :            :     //! Setup is a no-op, but must be provided since it's pure virtual
     120                 :            :     virtual void setup_this();
     121                 :            : 
     122                 :            :     //! The only setup/execute function we need, since meshing vertices is trivial
     123                 :            :     virtual void execute_this();
     124                 :            : 
     125                 :            :     enum ErrorStates {INVALIDINPUT, ENEGATIVE};
     126                 :            :     int prepareIO (int argc, char *argv[], int nrank, int numprocs, std::string  TestDir);
     127                 :            :     int parse_assembly_names(CParser parse, int argc, char *argv[]);
     128                 :            :     int load_meshes();
     129                 :            :     int load_meshes_more_procs(const int, int);
     130                 :            :     int load_meshes_parallel(const int, int);
     131                 :            :     int distribute_mesh(const int,  int);
     132                 :            :     int load_geometries();
     133                 :            :     int read_inputs_phase1 (int argc, char *argv[]);
     134                 :            :     int read_inputs_phase2 (int argc, char *argv[]);
     135                 :            :     int write_makefile ();
     136                 :            :     int write_minfofile ();
     137                 :            :     int find_assm(const int i, int &assm_index);
     138                 :            :     void banner();
     139                 :            :     int copymove(const int nrank, const int numprocs);
     140                 :            :     int copymove_all(const int nrank, const int numprocs);
     141                 :            :     int set_copymove_coords();
     142                 :            :     int save_mesh();
     143                 :            :     int save_mesh(int rank);
     144                 :            : #ifdef USE_MPI
     145                 :            :     int save_mesh_parallel(const int nrank, const int numprocs);
     146                 :            : #endif
     147                 :            :     int save_geometry();
     148                 :            :     int shift_mn_ids(iBase_EntitySetHandle orig_set, int index);
     149                 :            :     int extrude();
     150                 :            :     int move_verts(iBase_EntitySetHandle set, const double *dx);
     151                 :            :     int move_geoms(iBase_EntitySetHandle set, const double *dx);
     152                 :            :     int create_neumannset();
     153                 :            :     int refine_coremodel();
     154                 :            :     int load_and_compute_meshtogeom(iBase_EntitySetHandle set, std::string filenam);
     155                 :            : 
     156                 :            :     bool extrude_flag, umr_flag;
     157                 :            :     bool compute_meshtogeom;
     158                 :            :     std::vector <int> bsameas, deg;
     159                 :            :     bool mem_tflag;
     160                 :            :     std::string prob_type, savefiles, info, minfo, same_as, reloading_mf;
     161                 :            :     std::vector<std::string> files, all_meshfiles, mk_files;
     162                 :            :     std::vector<int> assm_meshfiles,  size_mf, times_loaded;
     163                 :            :     std::vector<int> rank_load;
     164                 :            :     std::vector<double> load_per_assm;
     165                 :            :     std::vector< std::vector<int> > assm_location;
     166                 :            :     std::vector<std::vector<int> > position_core;
     167                 :            :     std::vector<int> meshfile_proc;
     168                 :            :     std::vector<double> x_coord;
     169                 :            :     std::vector<double> y_coord;
     170                 :            :     bool nst_flag, nsb_flag, nss_flag, nssall_flag;
     171                 :            :     std::vector<std::string> core_alias;
     172                 :            :     std::vector<double> nsx, nsy, nsc;
     173                 :            :     int num_nsside, ms_startid, ns_startid, nDegree;
     174                 :            : 
     175                 :            :   private:
     176                 :            :     //! iGeom Impl for calling geometry creation/manipulation operations
     177                 :            :     iGeom *igeom;
     178                 :            : 
     179                 :            :     //! iMesh Impl for calling mesh creation/manipulation operations
     180                 :            :     iMesh *imesh;
     181                 :            : 
     182                 :            :     //! MOAB Impl for calling mesh creation/manipulation operations
     183                 :            :     moab::Interface *mb;
     184                 :            : 
     185                 :            :     std::vector <CopyMesh*> cm;
     186                 :            :     std::vector <CopyGeom*> cg;
     187                 :            :     ExtrudeMesh *em;
     188                 :            : 
     189                 :            :     iBase_EntitySetHandle root_set;
     190                 :            :     std::vector<iBase_EntitySetHandle> assys;
     191                 :            :     std::vector<int> assys_index;
     192                 :            :     // declare variables read in the inputs
     193                 :            :     int rank, procs, err;
     194                 :            :     int UNITCELL_DUCT, ASSY_TYPES ;
     195                 :            :     int nrings, nringsx, nringsy, pack_type, symm;
     196                 :            :     double pitch, pitchx, pitchy;
     197                 :            :     bool global_ids, back_mesh, have_hex27;
     198                 :            :     std::string outfile, mesh_info;
     199                 :            :     int nassys; // the number of mesh files
     200                 :            :     int tot_assys; // total no. of assms forming core
     201                 :            :     int set_DIM; // default is 3D
     202                 :            :     double PII;
     203                 :            :     double z_height;    // z_height for extruding surfaces mesh
     204                 :            :     int z_divisions; // z_divisions for extruding surface mesh
     205                 :            :     int nst_Id, nsb_Id, nssall_Id;
     206                 :            :     std::vector<int> nss_Id;
     207                 :            :     std::string testdir;
     208                 :            : 
     209                 :            :     // file related
     210                 :            :     std::ifstream file_input;    // File Input
     211                 :            :     std::ofstream make_file, info_file, minfo_file;    // File Output
     212                 :            :     std::string iname, ifile, mfile, geometry, back_meshfile, geom_engine, nsLoc, meshtogeomfile, infofile, minfofile, logfilename;
     213                 :            :     int linenumber;
     214                 :            :     std::string card,geom_type, meshfile, mf_alias, temp_alias, etype;
     215                 :            :     std::vector<std::string> assm_alias;
     216                 :            :     std::vector<int> all_ms_starts, all_ns_starts;
     217                 :            : 
     218                 :            :     mstream logfile, meshtogeom_file;
     219                 :            : 
     220                 :            :     // parsing related
     221                 :            :     std::string input_string;
     222                 :            :     std::string comment;
     223                 :            :     int MAXCHARS ;
     224                 :            : 
     225                 :            :     // merge related
     226                 :            :     double merge_tol;
     227                 :            :     int do_merge;
     228                 :            :     int update_sets;
     229                 :            :     iBase_TagHandle merge_tag;
     230                 :            : 
     231                 :            :     // MKUtils obj, assigning gid's etc.
     232                 :            :     //  MKUtils *mu;
     233                 :            :     // error handler
     234                 :            :     void IOErrorHandler (ErrorStates) const;
     235                 :            :     CClock Timer;
     236                 :            :     std::string szDateTime;
     237                 :            :     int run_flag;
     238                 :            :     clock_t sTime;
     239                 :            : #ifdef USE_MPI
     240                 :            :     moab::ParallelComm *pc;
     241                 :            : #endif
     242                 :            : 
     243                 :            :     // timing related variables
     244                 :            :     double ctload, ctcopymove, ctmerge, ctextrude, ctns, ctgid, ctsave;
     245                 :            :     clock_t tload, tcopymove, tmerge, textrude, tns, tgid, tsave;
     246                 :            : 
     247                 :            :     // more memory/time related variables
     248                 :            :     int ld_t, ld_tload, ld_tcopymove, ld_tsave, ld_tgid, ld_tmerge, ld_tns;
     249                 :            :     unsigned long long mem1, mem2, mem3, mem4, mem5, mem6, mem7;
     250                 :            :   };
     251                 :            : 
     252                 :        540 :   inline const char* CoreGen::name()
     253                 :            :   {
     254                 :        540 :     return "CoreGen";
     255                 :            :   }
     256                 :            : 
     257                 :        160 :   inline bool CoreGen::can_mesh(iBase_EntityType)
     258                 :            :   {
     259                 :        160 :     return false;
     260                 :            :   }
     261                 :            : 
     262                 :          0 :   inline bool CoreGen::can_mesh(ModelEnt *)
     263                 :            :   {
     264                 :          0 :     return true;
     265                 :            :   }
     266                 :            : 
     267                 :          0 :   inline const moab::EntityType* CoreGen::mesh_types_arr() const
     268                 :            :   {
     269                 :          0 :     return output_types();
     270                 :            :   }
     271                 :            : 
     272                 :            : } // namespace MeshKit
     273                 :            : #endif

Generated by: LCOV version 1.11