32 int rc = MPI_Init(argc, argv);
94 #ifdef AMPI_FORTRANCOMPATIBLE
229 newTop->
buf = ampiRequest->
buf ;
234 newTop->
tag = ampiRequest->
tag ;
238 requestStackTop = newTop ;
243 ampiRequest->
buf = oldTop->
buf ;
248 ampiRequest->
tag = oldTop->
tag ;
252 requestStackTop = oldTop->
next_p ;
330 while (inStack!=NULL) {
331 if (inStack->
buf==buf) {
334 inStack = inStack->
next_p ;
368 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION)
370 else if (datatype==MPI_FLOAT)
375 MPI_Abort(comm, MPI_ERR_TYPE);
376 return (
void*)malloc(adjointCount*s);
392 int rc = MPI_Type_get_extent(datatype, &lb, &extent) ;
393 assert(rc==MPI_SUCCESS);
395 ptr = malloc(count*extent) ;
412 int rc = MPI_Type_get_extent(datatype, &lb, &extent) ;
413 assert(rc==MPI_SUCCESS);
414 memcpy(target, source, count*extent) ;
421 void *source,
void *tangentSource,
422 void* target,
void* tangentTarget) {
424 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
425 double* tgt = (
double*)target ;
426 double* tgtd = (
double*)tangentTarget ;
427 double* src = (
double*)source ;
428 double* srcd = (
double*)tangentSource ;
429 for (i=0 ; i<
count ; ++i) {
430 if (tgtd) tgtd[i] = tgtd[i]*src[i] + tgt[i]*srcd[i] ;
431 tgt[i] = tgt[i]*src[i] ;
433 }
else if (datatype==MPI_FLOAT) {
434 float* tgt = (
float*)target ;
435 float* tgtd = (
float*)tangentTarget ;
436 float* src = (
float*)source ;
437 float* srcd = (
float*)tangentSource ;
438 for (i=0 ; i<
count ; ++i) {
439 if (tgtd) tgtd[i] = tgtd[i]*src[i] + tgt[i]*srcd[i] ;
440 tgt[i] = tgt[i]*src[i] ;
443 MPI_Abort(comm, MPI_ERR_TYPE);
449 void *source,
void *tangentSource,
450 void* target,
void* tangentTarget) {
452 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
453 double* tgt = (
double*)target ;
454 double* tgtd = (
double*)tangentTarget ;
455 double* src = (
double*)source ;
456 double* srcd = (
double*)tangentSource ;
457 for (i=0 ; i<
count ; ++i) {
458 if (tgt[i] > src[i]) {
459 if (tgtd) tgtd[i] = srcd[i] ;
463 }
else if (datatype==MPI_FLOAT) {
464 float* tgt = (
float*)target ;
465 float* tgtd = (
float*)tangentTarget ;
466 float* src = (
float*)source ;
467 float* srcd = (
float*)tangentSource ;
468 for (i=0 ; i<
count ; ++i) {
469 if (tgt[i] > src[i]) {
470 if (tgtd) tgtd[i] = srcd[i] ;
475 MPI_Abort(comm, MPI_ERR_TYPE);
481 void *source,
void *tangentSource,
482 void* target,
void* tangentTarget) {
484 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
485 double* tgt = (
double*)target ;
486 double* tgtd = (
double*)tangentTarget ;
487 double* src = (
double*)source ;
488 double* srcd = (
double*)tangentSource ;
489 for (i=0 ; i<
count ; ++i) {
490 if (tgt[i] < src[i]) {
491 if (tgtd) tgtd[i] = srcd[i] ;
495 }
else if (datatype==MPI_FLOAT) {
496 float* tgt = (
float*)target ;
497 float* tgtd = (
float*)tangentTarget ;
498 float* src = (
float*)source ;
499 float* srcd = (
float*)tangentSource ;
500 for (i=0 ; i<
count ; ++i) {
501 if (tgt[i] < src[i]) {
502 if (tgtd) tgtd[i] = srcd[i] ;
507 MPI_Abort(comm, MPI_ERR_TYPE);
512 void *source,
void *adjointSource,
513 void* target,
void* adjointTarget) {
515 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
516 double* tgt = (
double*)target ;
517 double* tgtb = (
double*)adjointTarget ;
518 double* src = (
double*)source ;
519 double* srcb = (
double*)adjointSource ;
520 for (i=0 ; i<
count ; ++i) {
521 srcb[i] += tgt[i]*tgtb[i] ;
524 }
else if (datatype==MPI_FLOAT) {
525 float* tgt = (
float*)target ;
526 float* tgtb = (
float*)adjointTarget ;
527 float* src = (
float*)source ;
528 float* srcb = (
float*)adjointSource ;
529 for (i=0 ; i<
count ; ++i) {
530 srcb[i] += tgt[i]*tgtb[i] ;
534 MPI_Abort(comm, MPI_ERR_TYPE);
539 void *source,
void *adjointSource,
540 void* target,
void* adjointTarget) {
542 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
543 double* tgt = (
double*)target ;
544 double* tgtb = (
double*)adjointTarget ;
545 double* src = (
double*)source ;
546 double* srcb = (
double*)adjointSource ;
547 for (i=0 ; i<
count ; ++i) {
553 }
else if (datatype==MPI_FLOAT) {
554 float* tgt = (
float*)target ;
555 float* tgtb = (
float*)adjointTarget ;
556 float* src = (
float*)source ;
557 float* srcb = (
float*)adjointSource ;
558 for (i=0 ; i<
count ; ++i) {
565 MPI_Abort(comm, MPI_ERR_TYPE);
570 void *source,
void *adjointSource,
571 void* target,
void* adjointTarget) {
573 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
574 double* tgt = (
double*)target ;
575 double* tgtb = (
double*)adjointTarget ;
576 double* src = (
double*)source ;
577 double* srcb = (
double*)adjointSource ;
578 for (i=0 ; i<
count ; ++i) {
584 }
else if (datatype==MPI_FLOAT) {
585 float* tgt = (
float*)target ;
586 float* tgtb = (
float*)adjointTarget ;
587 float* src = (
float*)source ;
588 float* srcb = (
float*)adjointSource ;
589 for (i=0 ; i<
count ; ++i) {
596 MPI_Abort(comm, MPI_ERR_TYPE);
600 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
601 double *vb = (
double *)target ;
602 double *nb = (
double *)source ;
604 for (i=0 ; i<adjointCount ; ++i) {
609 }
else if (datatype==MPI_FLOAT) {
610 float *vb = (
float *)target ;
611 float *nb = (
float *)source ;
613 for (i=0 ; i<adjointCount ; ++i) {
619 MPI_Abort(comm, MPI_ERR_TYPE);
623 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
624 double *vb = (
double *)target ;
625 double *nb = (
double *)source ;
627 for (i=0 ; i<adjointCount ; ++i) {
632 }
else if (datatype==MPI_FLOAT) {
633 float *vb = (
float *)target ;
634 float *nb = (
float *)source ;
636 for (i=0 ; i<adjointCount ; ++i) {
642 MPI_Abort(comm, MPI_ERR_TYPE);
646 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
647 double *vb = (
double *)target ;
648 double *nb = (
double *)source1 ;
649 double *fb = (
double *)source2 ;
651 for (i=0 ; i<adjointCount ; ++i) {
657 }
else if (datatype==MPI_FLOAT) {
658 float *vb = (
float *)target ;
659 float *nb = (
float *)source1 ;
660 float *fb = (
float *)source2 ;
662 for (i=0 ; i<adjointCount ; ++i) {
669 MPI_Abort(comm, MPI_ERR_TYPE);
677 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
678 double *vb = (
double *)target ;
679 double *nb = (
double *)source ;
681 for (i=0 ; i<adjointCount ; ++i) {
686 }
else if (datatype==MPI_FLOAT) {
687 float *vb = (
float *)target ;
688 float *nb = (
float *)source ;
690 for (i=0 ; i<adjointCount ; ++i) {
696 MPI_Abort(comm, MPI_ERR_TYPE);
703 if (datatype==MPI_DOUBLE || datatype==MPI_DOUBLE_PRECISION) {
704 double *vb = (
double *)target ;
706 for (i=0 ; i<adjointCount ; ++i) {
710 }
else if (datatype==MPI_FLOAT) {
711 float *vb = (
float *)target ;
713 for (i=0 ; i<adjointCount ; ++i) {
718 MPI_Abort(comm, MPI_ERR_TYPE);
726 printf(
"Please provide implementation of ADTOOL_AMPI_pushBuffer()\n") ;
734 printf(
"Please provide implementation of ADTOOL_AMPI_popBuffer()\n") ;
742 #ifdef AMPI_FORTRANCOMPATIBLE
749 #ifdef AMPI_FORTRANCOMPATIBLE
750 adtool_ampi_fortransetuptypes_(&adouble, &areal);
757 #ifdef AMPI_FORTRANCOMPATIBLE
760 adtool_ampi_fortrancleanuptypes_(&adouble, &areal);
784 #ifdef AMPI_FORTRANCOMPATIBLE