ceed.c (5ba4e83e9b1c3504427ca38afe780fb47d34b172) ceed.c (d04bbc78fb1f4c986969af2fa56bdcf94e57fde9)
1// Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors.
2// All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3//
4// SPDX-License-Identifier: BSD-2-Clause
5//
6// This file is part of CEED: http://github.com/ceed
7
8#define _POSIX_C_SOURCE 200112

--- 491 unchanged lines hidden (view full) ---

500 @return An error code: 0 - success, otherwise - failure
501
502 @ref Backend
503**/
504
505int CeedGetOperatorFallbackCeed(Ceed ceed, Ceed *fallback_ceed) {
506 int ierr;
507
1// Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors.
2// All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3//
4// SPDX-License-Identifier: BSD-2-Clause
5//
6// This file is part of CEED: http://github.com/ceed
7
8#define _POSIX_C_SOURCE 200112

--- 491 unchanged lines hidden (view full) ---

500 @return An error code: 0 - success, otherwise - failure
501
502 @ref Backend
503**/
504
505int CeedGetOperatorFallbackCeed(Ceed ceed, Ceed *fallback_ceed) {
506 int ierr;
507
508 if (ceed->has_valid_op_fallback_resource) {
509 CeedDebug256(ceed, 1, "---------- CeedOperator Fallback ----------\n");
510 CeedDebug256(ceed, 255, "Getting fallback from %s to %s\n", ceed->resource,
511 ceed->op_fallback_resource);
512 }
513
508 // Create fallback Ceed if uninitalized
514 // Create fallback Ceed if uninitalized
509 if (!ceed->op_fallback_ceed) {
510 // Check resource
511 const char *resource, *fallback_resource;
512 ierr = CeedGetResource(ceed, &resource); CeedChk(ierr);
513 ierr = CeedGetOperatorFallbackResource(ceed, &fallback_resource); CeedChk(ierr);
514 if (!strcmp(resource, fallback_resource))
515 // LCOV_EXCL_START
516 return CeedError(ceed, CEED_ERROR_UNSUPPORTED,
517 "Backend %s cannot create an operator"
518 "fallback to resource %s", resource, fallback_resource);
519 // LCOV_EXCL_STOP
515 if (!ceed->op_fallback_ceed && ceed->has_valid_op_fallback_resource) {
516 CeedDebug256(ceed, 255, "Creating fallback Ceed");
520
517
521 // Create fallback
522 Ceed fallback_ceed;
518 Ceed fallback_ceed;
519 const char *fallback_resource;
520
521 ierr = CeedGetOperatorFallbackResource(ceed, &fallback_resource); CeedChk(ierr);
523 ierr = CeedInit(fallback_resource, &fallback_ceed); CeedChk(ierr);
524 fallback_ceed->op_fallback_parent = ceed;
525 fallback_ceed->Error = ceed->Error;
526 ceed->op_fallback_ceed = fallback_ceed;
527 }
528 *fallback_ceed = ceed->op_fallback_ceed;
529
530 return CEED_ERROR_SUCCESS;

--- 16 unchanged lines hidden (view full) ---

547 int ierr;
548
549 // Free old
550 ierr = CeedFree(&ceed->op_fallback_resource); CeedChk(ierr);
551
552 // Set new
553 ierr = CeedStringAllocCopy(resource, (char **)&ceed->op_fallback_resource);
554 CeedChk(ierr);
522 ierr = CeedInit(fallback_resource, &fallback_ceed); CeedChk(ierr);
523 fallback_ceed->op_fallback_parent = ceed;
524 fallback_ceed->Error = ceed->Error;
525 ceed->op_fallback_ceed = fallback_ceed;
526 }
527 *fallback_ceed = ceed->op_fallback_ceed;
528
529 return CEED_ERROR_SUCCESS;

--- 16 unchanged lines hidden (view full) ---

546 int ierr;
547
548 // Free old
549 ierr = CeedFree(&ceed->op_fallback_resource); CeedChk(ierr);
550
551 // Set new
552 ierr = CeedStringAllocCopy(resource, (char **)&ceed->op_fallback_resource);
553 CeedChk(ierr);
554
555 // Check validity
556 ceed->has_valid_op_fallback_resource = strlen(ceed->op_fallback_resource) > 0 &&
557 strcmp(ceed->op_fallback_resource, ceed->resource);
558
555 return CEED_ERROR_SUCCESS;
556}
557
558/**
559 @brief Get the parent Ceed context associated with a fallback Ceed context
560 for a CeedOperator
561
562 @param ceed Ceed context

--- 377 unchanged lines hidden (view full) ---

940 const char fallbackresource[] = "";
941 ierr = CeedSetOperatorFallbackResource(*ceed, fallbackresource);
942 CeedChk(ierr);
943
944 // Record env variables CEED_DEBUG or DBG
945 (*ceed)->is_debug = !!getenv("CEED_DEBUG") || !!getenv("DEBUG") ||
946 !!getenv("DBG");
947
559 return CEED_ERROR_SUCCESS;
560}
561
562/**
563 @brief Get the parent Ceed context associated with a fallback Ceed context
564 for a CeedOperator
565
566 @param ceed Ceed context

--- 377 unchanged lines hidden (view full) ---

944 const char fallbackresource[] = "";
945 ierr = CeedSetOperatorFallbackResource(*ceed, fallbackresource);
946 CeedChk(ierr);
947
948 // Record env variables CEED_DEBUG or DBG
949 (*ceed)->is_debug = !!getenv("CEED_DEBUG") || !!getenv("DEBUG") ||
950 !!getenv("DBG");
951
948 // Backend specific setup
949 ierr = backends[match_index].init(&resource[match_help], *ceed); CeedChk(ierr);
950
951 // Copy resource prefix, if backend setup successful
952 ierr = CeedStringAllocCopy(backends[match_index].prefix,
953 (char **)&(*ceed)->resource);
954 CeedChk(ierr);
955
956 // Set default JiT source root
957 // Note: there will always be the default root for every Ceed
958 // but all additional paths are added to the top-most parent
959 ierr = CeedAddJitSourceRoot(*ceed, (char *)CeedJitSourceRootDefault);
960 CeedChk(ierr);
961
952 // Copy resource prefix, if backend setup successful
953 ierr = CeedStringAllocCopy(backends[match_index].prefix,
954 (char **)&(*ceed)->resource);
955 CeedChk(ierr);
956
957 // Set default JiT source root
958 // Note: there will always be the default root for every Ceed
959 // but all additional paths are added to the top-most parent
960 ierr = CeedAddJitSourceRoot(*ceed, (char *)CeedJitSourceRootDefault);
961 CeedChk(ierr);
962
963 // Backend specific setup
964 ierr = backends[match_index].init(&resource[match_help], *ceed); CeedChk(ierr);
965
962 return CEED_ERROR_SUCCESS;
963}
964
965/**
966 @brief Copy the pointer to a Ceed context. Both pointers should
967 be destroyed with `CeedDestroy()`;
968 Note: If `*ceed_copy` is non-NULL, then it is assumed that
969 `*ceed_copy` is a pointer to a Ceed context. This Ceed

--- 383 unchanged lines hidden ---
966 return CEED_ERROR_SUCCESS;
967}
968
969/**
970 @brief Copy the pointer to a Ceed context. Both pointers should
971 be destroyed with `CeedDestroy()`;
972 Note: If `*ceed_copy` is non-NULL, then it is assumed that
973 `*ceed_copy` is a pointer to a Ceed context. This Ceed

--- 383 unchanged lines hidden ---