#!/bin/sh # # create_dispatch.sh # # LGPL Version 2.1 HEADER START # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301 USA # # LGPL Version 2.1 HEADER END # # # Copyright (c) 2021, Regents of the University of Minnesota. # All rights reserved. # # Contributors: # Yaser Afshar # file_name=edip_implementation_compute_dispatch.cpp if test -e $file_name; then rm -fr $file_name fi printf " if (is_edip_c_) {\n" >> $file_name printf " switch (GetComputeIndex(is_compute_energy,\n" >> $file_name printf " is_compute_forces, is_compute_particle_energy,\n" >> $file_name printf " is_compute_virial, is_compute_particle_virial)) {\n" >> $file_name i=0 for energy in false true; do for force in false true; do for particleEnergy in false true; do for virial in false true; do for particleVirial in false true; do printf " case $i:\n" >> $file_name printf " ier = EDIPCCompute<$energy, $force, $particleEnergy, $virial, " >> $file_name printf "$particleVirial>(\n" >> $file_name printf " model_compute, model_compute_arguments, particle_species_codes,\n" >> $file_name printf " particle_contributing, coordinates, energy, forces, particle_energy,\n" >> $file_name printf " *virial, particle_virial);\n" >> $file_name printf " break;\n" >> $file_name i=`expr $i + 1` done # particleVirial done # virial done # particleEnergy done # force done # energy printf " default:\n" >> $file_name printf " HELPER_LOG_ERROR(\"Unknown compute function index.\");\n" >> $file_name printf " ier = true;\n" >> $file_name printf " break;\n" >> $file_name printf " }\n" >> $file_name printf " } else if (is_edip_single_) {\n" >> $file_name printf " switch (GetComputeIndex(is_compute_energy,\n" >> $file_name printf " is_compute_forces, is_compute_particle_energy,\n" >> $file_name printf " is_compute_virial, is_compute_particle_virial)) {\n" >> $file_name i=0 for energy in false true; do for force in false true; do for particleEnergy in false true; do for virial in false true; do for particleVirial in false true; do printf " case $i:\n" >> $file_name printf " ier = EDIPSingleCompute<$energy, $force, $particleEnergy, $virial, " >> $file_name printf "$particleVirial>(\n" >> $file_name printf " model_compute, model_compute_arguments, particle_species_codes,\n" >> $file_name printf " particle_contributing, coordinates, energy, forces, particle_energy,\n" >> $file_name printf " *virial, particle_virial);\n" >> $file_name printf " break;\n" >> $file_name i=`expr $i + 1` done # particleVirial done # virial done # particleEnergy done # force done # energy printf " default:\n" >> $file_name printf " HELPER_LOG_ERROR(\"Unknown compute function index.\");\n" >> $file_name printf " ier = true;\n" >> $file_name printf " break;\n" >> $file_name printf " }\n" >> $file_name printf " } else if (is_edip_multi_) {\n" >> $file_name printf " switch (GetComputeIndex(is_compute_energy,\n" >> $file_name printf " is_compute_forces, is_compute_particle_energy,\n" >> $file_name printf " is_compute_virial, is_compute_particle_virial)) {\n" >> $file_name i=0 for energy in false true; do for force in false true; do for particleEnergy in false true; do for virial in false true; do for particleVirial in false true; do printf " case $i:\n" >> $file_name printf " ier = EDIPMultiCompute<$energy, $force, $particleEnergy, $virial, " >> $file_name printf "$particleVirial>(\n" >> $file_name printf " model_compute, model_compute_arguments, particle_species_codes,\n" >> $file_name printf " particle_contributing, coordinates, energy, forces, particle_energy,\n" >> $file_name printf " *virial, particle_virial);\n" >> $file_name printf " break;\n" >> $file_name i=`expr $i + 1` done # particleVirial done # virial done # particleEnergy done # force done # energy printf " default:\n" >> $file_name printf " HELPER_LOG_ERROR(\"Unknown compute function index.\");\n" >> $file_name printf " ier = true;\n" >> $file_name printf " break;\n" >> $file_name printf " }\n" >> $file_name printf " }\n" >> $file_name file_name=edip_c_dispatch.cpp if test -e $file_name; then rm -fr $file_name fi printf "// Explicit template instantiation\n\n" >> $file_name for energy in false true; do for force in false true; do for particleEnergy in false true; do for virial in false true; do for particleVirial in false true; do printf "template void EDIPC::Pair<$energy, $force, $particleEnergy, $virial, $particleVirial>(\n" >> $file_name printf " std::size_t const, int const *const, double *const, VectorOfSizeDIM *const,\n" >> $file_name printf " double *const, VectorOfSizeSix, VectorOfSizeSix *const);\n" >> $file_name done # particleVirial done # virial done # particleEnergy done # force done # energy printf "\n" >> $file_name for energy in false true; do for force in false true; do for particleEnergy in false true; do for virial in false true; do for particleVirial in false true; do printf "template void EDIPC::PairZbl<$energy, $force, $particleEnergy, $virial, $particleVirial>(\n" >> $file_name printf " std::size_t const, int const *const, double *const, VectorOfSizeDIM *const,\n" >> $file_name printf " double *const, VectorOfSizeSix, VectorOfSizeSix *const);\n" >> $file_name done # particleVirial done # virial done # particleEnergy done # force done # energy printf "\n" >> $file_name for energy in false true; do for force in false true; do for particleEnergy in false true; do for virial in false true; do for particleVirial in false true; do printf "template void EDIPC::Triple<$energy, $force, $particleEnergy, $virial, $particleVirial>(\n" >> $file_name printf " std::size_t const, int const *const, double *const, VectorOfSizeDIM *const,\n" >> $file_name printf " double *const, VectorOfSizeSix, VectorOfSizeSix *const);\n" >> $file_name done # particleVirial done # virial done # particleEnergy done # force done # energy