1 module petscmpi 2use, intrinsic :: ISO_C_binding 3#include <petscconf.h> 4#include "petsc/finclude/petscsys.h" 5#if defined(PETSC_HAVE_MPIUNI) 6 use mpiuni 7#else 8#if defined(PETSC_HAVE_MPI_F90MODULE) 9 use mpi 10#else 11#include "mpif.h" 12#endif 13#endif 14 15 public:: MPIU_REAL, MPIU_SUM, MPIU_SCALAR, MPIU_INTEGER 16 public:: PETSC_COMM_WORLD, PETSC_COMM_SELF 17 18! These values are for __float128 are handled in the common block (below) 19! and transmitted from the C code 20 21 integer4 :: MPIU_REAL 22 integer4 :: MPIU_SUM 23 integer4 :: MPIU_SCALAR 24 integer4 :: MPIU_INTEGER 25 26 MPI_Comm::PETSC_COMM_WORLD = 0 27 MPI_Comm::PETSC_COMM_SELF = 0 28 29#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 30!DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL 31!DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM 32!DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR 33!DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER 34!DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_SELF 35!DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_WORLD 36#endif 37 end module 38 39! ------------------------------------------------------------------------ 40 41 module petscsysdef 42 use, intrinsic :: ISO_C_binding 43#if defined(PETSC_HAVE_MPI_F90MODULE_VISIBILITY) 44 use petscmpi 45#else 46 use petscmpi, only: MPIU_REAL,MPIU_SUM,MPIU_SCALAR,MPIU_INTEGER,PETSC_COMM_WORLD,PETSC_COMM_SELF 47#endif 48 PetscReal,Parameter :: PetscReal_Private = 1.0 49 Integer,Parameter :: PETSC_REAL_KIND = Selected_Real_Kind(Precision(PetscReal_Private)) 50 51 PetscBool, parameter :: PETSC_TRUE = .true. 52 PetscBool, parameter :: PETSC_FALSE = .false. 53 54 PetscInt, parameter :: PETSC_DECIDE = -1 55 PetscInt, parameter :: PETSC_DECIDE_INTEGER = -1 56 PetscReal, parameter :: PETSC_DECIDE_REAL = -1.0d0 57#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 58!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE 59!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_INTEGER 60!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_REAL 61#endif 62 63 PetscInt, parameter :: PETSC_DETERMINE = -1 64 PetscInt, parameter :: PETSC_DETERMINE_INTEGER = -1 65 PetscReal, parameter :: PETSC_DETERMINE_REAL = -1.0d0 66#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 67!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE 68!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_INTEGER 69!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_REAL 70#endif 71 72 PetscInt, parameter :: PETSC_CURRENT = -2 73 PetscInt, parameter :: PETSC_CURRENT_INTEGER = -2 74 PetscReal, parameter :: PETSC_CURRENT_REAL = -2.0d0 75#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 76!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT 77!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_INTEGER 78!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_REAL 79#endif 80 81 PetscInt, parameter :: PETSC_DEFAULT = -2 82 PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2 83 PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0d0 84#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 85!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT 86!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER 87!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL 88#endif 89 PetscFortranAddr, parameter :: PETSC_STDOUT = 0 90! 91! PETSc DataTypes 92! 93#if defined(PETSC_USE_REAL_SINGLE) 94#define PETSC_REAL PETSC_FLOAT 95#elif defined(PETSC_USE_REAL___FLOAT128) 96#define PETSC_REAL PETSC___FLOAT128 97#else 98#define PETSC_REAL PETSC_DOUBLE 99#endif 100#define PETSC_FORTRANADDR PETSC_LONG 101 102! PETSc mathematics include file. Defines certain basic mathematical 103! constants and functions for working with single and double precision 104! floating point numbers as well as complex and integers. 105! 106! Representation of complex i 107! 108#if defined(PETSC_USE_REAL_SINGLE) 109 PetscComplex, parameter :: PETSC_i = (0.0e0,1.0e0) 110#else 111 PetscComplex, parameter :: PETSC_i = (0.0d0,1.0d0) 112#endif 113 114! A PETSC_NULL_FUNCTION pointer 115! 116 external PETSC_NULL_FUNCTION 117! 118! Possible arguments to PetscPushErrorHandler() 119! 120 external PETSCTRACEBACKERRORHANDLER 121 external PETSCABORTERRORHANDLER 122 external PETSCEMACSCLIENTERRORHANDLER 123 external PETSCATTACHDEBUGGERERRORHANDLER 124 external PETSCIGNOREERRORHANDLER 125! 126 external PetscIsInfOrNanScalar 127 external PetscIsInfOrNanReal 128 PetscBool PetscIsInfOrNanScalar 129 PetscBool PetscIsInfOrNanReal 130 131#include <../ftn/sys/petscall.h> 132 133 PetscViewer, parameter :: PETSC_VIEWER_STDOUT_SELF = tPetscViewer(9) 134 PetscViewer, parameter :: PETSC_VIEWER_DRAW_WORLD = tPetscViewer(4) 135 PetscViewer, parameter :: PETSC_VIEWER_DRAW_SELF = tPetscViewer(5) 136 PetscViewer, parameter :: PETSC_VIEWER_SOCKET_WORLD = tPetscViewer(6) 137 PetscViewer, parameter :: PETSC_VIEWER_SOCKET_SELF = tPetscViewer(7) 138 PetscViewer, parameter :: PETSC_VIEWER_STDOUT_WORLD = tPetscViewer(8) 139 PetscViewer, parameter :: PETSC_VIEWER_STDERR_WORLD = tPetscViewer(10) 140 PetscViewer, parameter :: PETSC_VIEWER_STDERR_SELF = tPetscViewer(11) 141 PetscViewer, parameter :: PETSC_VIEWER_BINARY_WORLD = tPetscViewer(12) 142 PetscViewer, parameter :: PETSC_VIEWER_BINARY_SELF = tPetscViewer(13) 143 PetscViewer, parameter :: PETSC_VIEWER_MATLAB_WORLD = tPetscViewer(14) 144 PetscViewer, parameter :: PETSC_VIEWER_MATLAB_SELF = tPetscViewer(15) 145 146 PetscViewer PETSC_VIEWER_STDOUT_ 147 PetscViewer PETSC_VIEWER_DRAW_ 148 external PETSC_VIEWER_STDOUT_ 149 external PETSC_VIEWER_DRAW_ 150 external PetscViewerAndFormatDestroy 151 152#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 153!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_SELF 154!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_WORLD 155!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_SELF 156!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_WORLD 157!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_SELF 158!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_WORLD 159!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_WORLD 160!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_SELF 161!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_WORLD 162!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_SELF 163!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_WORLD 164!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_SELF 165#endif 166 167 PetscErrorCode, parameter :: PETSC_ERR_MEM = 55 168 PetscErrorCode, parameter :: PETSC_ERR_SUP = 56 169 PetscErrorCode, parameter :: PETSC_ERR_SUP_SYS = 57 170 PetscErrorCode, parameter :: PETSC_ERR_ORDER = 58 171 PetscErrorCode, parameter :: PETSC_ERR_SIG = 59 172 PetscErrorCode, parameter :: PETSC_ERR_FP = 72 173 PetscErrorCode, parameter :: PETSC_ERR_COR = 74 174 PetscErrorCode, parameter :: PETSC_ERR_LIB = 76 175 PetscErrorCode, parameter :: PETSC_ERR_PLIB = 77 176 PetscErrorCode, parameter :: PETSC_ERR_MEMC = 78 177 PetscErrorCode, parameter :: PETSC_ERR_CONV_FAILED = 82 178 PetscErrorCode, parameter :: PETSC_ERR_USER = 83 179 PetscErrorCode, parameter :: PETSC_ERR_SYS = 88 180 PetscErrorCode, parameter :: PETSC_ERR_POINTER = 70 181 PetscErrorCode, parameter :: PETSC_ERR_MPI_LIB_INCOMP = 87 182 183 PetscErrorCode, parameter :: PETSC_ERR_ARG_SIZ = 60 184 PetscErrorCode, parameter :: PETSC_ERR_ARG_IDN = 61 185 PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONG = 62 186 PetscErrorCode, parameter :: PETSC_ERR_ARG_CORRUPT = 64 187 PetscErrorCode, parameter :: PETSC_ERR_ARG_OUTOFRANGE = 63 188 PetscErrorCode, parameter :: PETSC_ERR_ARG_BADPTR = 68 189 PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMETYPE = 69 190 PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMECOMM = 80 191 PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONGSTATE = 73 192 PetscErrorCode, parameter :: PETSC_ERR_ARG_TYPENOTSET = 89 193 PetscErrorCode, parameter :: PETSC_ERR_ARG_INCOMP = 75 194 PetscErrorCode, parameter :: PETSC_ERR_ARG_NULL = 85 195 PetscErrorCode, parameter :: PETSC_ERR_ARG_UNKNOWN_TYPE = 86 196 197 PetscErrorCode, parameter :: PETSC_ERR_FILE_OPEN = 65 198 PetscErrorCode, parameter :: PETSC_ERR_FILE_READ = 66 199 PetscErrorCode, parameter :: PETSC_ERR_FILE_WRITE = 67 200 PetscErrorCode, parameter :: PETSC_ERR_FILE_UNEXPECTED = 79 201 202 PetscErrorCode, parameter :: PETSC_ERR_MAT_LU_ZRPVT = 71 203 PetscErrorCode, parameter :: PETSC_ERR_MAT_CH_ZRPVT = 81 204 205 PetscErrorCode, parameter :: PETSC_ERR_INT_OVERFLOW = 84 206 207 PetscErrorCode, parameter :: PETSC_ERR_FLOP_COUNT = 90 208 PetscErrorCode, parameter :: PETSC_ERR_NOT_CONVERGED = 91 209 PetscErrorCode, parameter :: PETSC_ERR_MISSING_FACTOR = 92 210 PetscErrorCode, parameter :: PETSC_ERR_OPT_OVERWRITE = 93 211 PetscErrorCode, parameter :: PETSC_ERR_WRONG_MPI_SIZE = 94 212 PetscErrorCode, parameter :: PETSC_ERR_USER_INPUT = 95 213 PetscErrorCode, parameter :: PETSC_ERR_GPU_RESOURCE = 96 214 PetscErrorCode, parameter :: PETSC_ERR_GPU = 97 215 PetscErrorCode, parameter :: PETSC_ERR_MPI = 98 216 PetscErrorCode, parameter :: PETSC_ERR_RETURN = 99 217 218 character(len = 80) :: PETSC_NULL_CHARACTER = '' 219 PetscInt PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_ARRAY(1) 220 PetscInt, pointer :: PETSC_NULL_INTEGER_POINTER(:) 221 PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:) 222 PetscFortranDouble PETSC_NULL_DOUBLE 223 PetscScalar PETSC_NULL_SCALAR, PETSC_NULL_SCALAR_ARRAY(1) 224 PetscReal PETSC_NULL_REAL, PETSC_NULL_REAL_ARRAY(1) 225 PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:) 226 PetscBool PETSC_NULL_BOOL 227 PetscEnum PETSC_NULL_ENUM 228 MPI_Comm PETSC_NULL_MPI_COMM 229! 230! Basic math constants 231! 232 PetscReal PETSC_PI 233 PetscReal PETSC_MAX_REAL 234 PetscReal PETSC_MIN_REAL 235 PetscReal PETSC_MACHINE_EPSILON 236 PetscReal PETSC_SQRT_MACHINE_EPSILON 237 PetscReal PETSC_SMALL 238 PetscReal PETSC_INFINITY 239 PetscReal PETSC_NINFINITY 240 241#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 242!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_CHARACTER 243!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER 244!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_ARRAY 245!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_POINTER 246!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_POINTER 247!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_POINTER 248!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DOUBLE 249!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR 250!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_ARRAY 251!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL 252!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_ARRAY 253!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_BOOL 254!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_ENUM 255!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_MPI_COMM 256!DEC$ ATTRIBUTES DLLEXPORT::PETSC_PI 257!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MAX_REAL 258!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MIN_REAL 259!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MACHINE_EPSILON 260!DEC$ ATTRIBUTES DLLEXPORT::PETSC_SQRT_MACHINE_EPSILON 261!DEC$ ATTRIBUTES DLLEXPORT::PETSC_SMALL 262!DEC$ ATTRIBUTES DLLEXPORT::PETSC_INFINITY 263!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NINFINITY 264#endif 265 266 type tPetscReal2d 267 sequence 268 PetscReal, dimension(:), pointer :: ptr 269 end type tPetscReal2D 270 271 end module 272 273! ------------------------------------------------------------------------ 274 275 module petscsys 276 use,intrinsic :: iso_c_binding 277 use petscsysdef 278 279#include <../src/sys/ftn-mod/petscsys.h90> 280#include <../src/sys/ftn-mod/petscviewer.h90> 281#include <../ftn/sys/petscall.h90> 282 283 interface PetscInitialize 284 module procedure PetscInitializeWithHelp, PetscInitializeNoHelp, PetscInitializeNoArguments 285 end interface 286 287 interface PetscSetFortranBasePointers 288 subroutine PetscSetFortranBasePointers( & 289 & PETSC_NULL_CHARACTER, & 290 & PETSC_NULL_INTEGER,PETSC_NULL_SCALAR, & 291 & PETSC_NULL_DOUBLE,PETSC_NULL_REAL, & 292 & PETSC_NULL_BOOL,PETSC_NULL_ENUM,PETSC_NULL_FUNCTION, & 293 & PETSC_NULL_MPI_COMM, & 294 & PETSC_NULL_INTEGER_ARRAY,PETSC_NULL_SCALAR_ARRAY, & 295 & PETSC_NULL_REAL_ARRAY, APETSC_NULL_INTEGER_POINTER, & 296 & PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER) 297 use, intrinsic :: ISO_C_binding 298 character(*) PETSC_NULL_CHARACTER 299 PetscInt PETSC_NULL_INTEGER 300 PetscScalar PETSC_NULL_SCALAR 301 PetscFortranDouble PETSC_NULL_DOUBLE 302 PetscReal PETSC_NULL_REAL 303 PetscBool PETSC_NULL_BOOL 304 PetscEnum PETSC_NULL_ENUM 305 external PETSC_NULL_FUNCTION 306 MPI_Comm PETSC_NULL_MPI_COMM 307 PetscInt PETSC_NULL_INTEGER_ARRAY(*) 308 PetscScalar PETSC_NULL_SCALAR_ARRAY(*) 309 PetscReal PETSC_NULL_REAL_ARRAY(*) 310 PetscInt, pointer :: APETSC_NULL_INTEGER_POINTER(:) 311 PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:) 312 PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:) 313 end subroutine PetscSetFortranBasePointers 314 end interface 315 316 interface PetscOptionsString 317 subroutine PetscOptionsString(string, text, man, default, value, flg, ierr) 318 use, intrinsic :: ISO_C_binding 319 character(*) string, text, man, default, value 320 PetscBool flg 321 PetscErrorCode ierr 322 end subroutine PetscOptionsString 323 end interface 324 325 Interface petscbinaryread 326 subroutine petscbinaryreadcomplex(fd,data,num,count,type,z) 327 use, intrinsic :: ISO_C_binding 328 import ePetscDataType 329 integer4 fd 330 PetscComplex data(*) 331 PetscInt num 332 PetscInt count 333 PetscDataType type 334 PetscErrorCode z 335 end subroutine 336 subroutine petscbinaryreadreal(fd,data,num,count,type,z) 337 use, intrinsic :: ISO_C_binding 338 import ePetscDataType 339 integer4 fd 340 PetscReal data(*) 341 PetscInt num 342 PetscInt count 343 PetscDataType type 344 PetscErrorCode z 345 end subroutine 346 subroutine petscbinaryreadint(fd,data,num,count,type,z) 347 use, intrinsic :: ISO_C_binding 348 import ePetscDataType 349 integer4 fd 350 PetscInt data(*) 351 PetscInt num 352 PetscInt count 353 PetscDataType type 354 PetscErrorCode z 355 end subroutine 356 subroutine petscbinaryreadcomplex1(fd,data,num,count,type,z) 357 use, intrinsic :: ISO_C_binding 358 import ePetscDataType 359 integer4 fd 360 PetscComplex data 361 PetscInt num 362 PetscInt count 363 PetscDataType type 364 PetscErrorCode z 365 end subroutine 366 subroutine petscbinaryreadreal1(fd,data,num,count,type,z) 367 use, intrinsic :: ISO_C_binding 368 import ePetscDataType 369 integer4 fd 370 PetscReal data 371 PetscInt num 372 PetscInt count 373 PetscDataType type 374 PetscErrorCode z 375 end subroutine 376 subroutine petscbinaryreadint1(fd,data,num,count,type,z) 377 use, intrinsic :: ISO_C_binding 378 import ePetscDataType 379 integer4 fd 380 PetscInt data 381 PetscInt num 382 PetscInt count 383 PetscDataType type 384 PetscErrorCode z 385 end subroutine 386 subroutine petscbinaryreadcomplexcnt(fd,data,num,count,type,z) 387 use, intrinsic :: ISO_C_binding 388 import ePetscDataType 389 integer4 fd 390 PetscComplex data(*) 391 PetscInt num 392 PetscInt count(1) 393 PetscDataType type 394 PetscErrorCode z 395 end subroutine 396 subroutine petscbinaryreadrealcnt(fd,data,num,count,type,z) 397 use, intrinsic :: ISO_C_binding 398 import ePetscDataType 399 integer4 fd 400 PetscReal data(*) 401 PetscInt num 402 PetscInt count(1) 403 PetscDataType type 404 PetscErrorCode z 405 end subroutine 406 subroutine petscbinaryreadintcnt(fd,data,num,count,type,z) 407 use, intrinsic :: ISO_C_binding 408 import ePetscDataType 409 integer4 fd 410 PetscInt data(*) 411 PetscInt num 412 PetscInt count(1) 413 PetscDataType type 414 PetscErrorCode z 415 end subroutine 416 subroutine petscbinaryreadcomplex1cnt(fd,data,num,count,type,z) 417 use, intrinsic :: ISO_C_binding 418 import ePetscDataType 419 integer4 fd 420 PetscComplex data 421 PetscInt num 422 PetscInt count(1) 423 PetscDataType type 424 PetscErrorCode z 425 end subroutine 426 subroutine petscbinaryreadreal1cnt(fd,data,num,count,type,z) 427 use, intrinsic :: ISO_C_binding 428 import ePetscDataType 429 integer4 fd 430 PetscReal data 431 PetscInt num 432 PetscInt count(1) 433 PetscDataType type 434 PetscErrorCode z 435 end subroutine 436 subroutine petscbinaryreadint1cnt(fd,data,num,count,type,z) 437 use, intrinsic :: ISO_C_binding 438 import ePetscDataType 439 integer4 fd 440 PetscInt data 441 PetscInt num 442 PetscInt count(1) 443 PetscDataType type 444 PetscErrorCode z 445 end subroutine 446 end Interface 447 448 Interface petscbinarywrite 449 subroutine petscbinarywritecomplex(fd,data,num,type,z) 450 use, intrinsic :: ISO_C_binding 451 import ePetscDataType 452 integer4 fd 453 PetscComplex data(*) 454 PetscInt num 455 PetscDataType type 456 PetscErrorCode z 457 end subroutine 458 subroutine petscbinarywritereal(fd,data,num,type,z) 459 use, intrinsic :: ISO_C_binding 460 import ePetscDataType 461 integer4 fd 462 PetscReal data(*) 463 PetscInt num 464 PetscDataType type 465 PetscErrorCode z 466 end subroutine 467 subroutine petscbinarywriteint(fd,data,num,type,z) 468 use, intrinsic :: ISO_C_binding 469 import ePetscDataType 470 integer4 fd 471 PetscInt data(*) 472 PetscInt num 473 PetscDataType type 474 PetscErrorCode z 475 end subroutine 476 subroutine petscbinarywritecomplex1(fd,data,num,type,z) 477 use, intrinsic :: ISO_C_binding 478 import ePetscDataType 479 integer4 fd 480 PetscComplex data 481 PetscInt num 482 PetscDataType type 483 PetscErrorCode z 484 end subroutine 485 subroutine petscbinarywritereal1(fd,data,num,type,z) 486 use, intrinsic :: ISO_C_binding 487 import ePetscDataType 488 integer4 fd 489 PetscReal data 490 PetscInt num 491 PetscDataType type 492 PetscErrorCode z 493 end subroutine 494 subroutine petscbinarywriteint1(fd,data,num,type,z) 495 use, intrinsic :: ISO_C_binding 496 import ePetscDataType 497 integer4 fd 498 PetscInt data 499 PetscInt num 500 PetscDataType type 501 PetscErrorCode z 502 end subroutine 503 end Interface 504 505 contains 506#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 507!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeWithHelp 508#endif 509 subroutine PetscInitializeWithHelp(filename,help,ierr) 510 character(len=*) :: filename 511 character(len=*) :: help 512 PetscErrorCode :: ierr 513 514 if (filename .ne. PETSC_NULL_CHARACTER) then 515 call PetscInitializeF(trim(filename),help,ierr) 516 CHKERRQ(ierr) 517 else 518 call PetscInitializeF(filename,help,ierr) 519 CHKERRQ(ierr) 520 endif 521 end subroutine PetscInitializeWithHelp 522 523#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 524!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoHelp 525#endif 526 subroutine PetscInitializeNoHelp(filename,ierr) 527 character(len=*) :: filename 528 PetscErrorCode :: ierr 529 530 if (filename .ne. PETSC_NULL_CHARACTER) then 531 call PetscInitializeF(trim(filename),PETSC_NULL_CHARACTER,ierr) 532 CHKERRQ(ierr) 533 else 534 call PetscInitializeF(filename,PETSC_NULL_CHARACTER,ierr) 535 CHKERRQ(ierr) 536 endif 537 end subroutine PetscInitializeNoHelp 538 539#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 540!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoArguments 541#endif 542 subroutine PetscInitializeNoArguments(ierr) 543 PetscErrorCode :: ierr 544 545 call PetscInitializeF(PETSC_NULL_CHARACTER,PETSC_NULL_CHARACTER,ierr) 546 CHKERRQ(ierr) 547 end subroutine PetscInitializeNoArguments 548 549#include <../ftn/sys/petscall.hf90> 550 end module 551 552 Subroutine F90ArraySetRealPointer(array, sz, j, T) 553 use petscsysdef 554 PetscInt j,sz 555 PetscReal, target :: array(1:sz) 556 PetscReal2d, pointer :: T(:) 557 T(j+1)%ptr=>array 558 End Subroutine 559#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 560!DEC$ ATTRIBUTES DLLEXPORT:: F90ArraySetRealPointer 561#endif 562 563! ------------------------------------------------------------------------ 564! TODO: generate the modules below by looping over 565! ftn/sys/XXX.h90 566! and skipping those in petscall.h 567 568 module petscbag 569 use petscsys 570#include <../include/petsc/finclude/petscbag.h> 571#include <../ftn/sys/petscbag.h> 572#include <../ftn/sys/petscbag.h90> 573 contains 574 575#include <../ftn/sys/petscbag.hf90> 576 end module 577 578! ------------------------------------------------------------------------ 579 580 module petscbm 581 use petscsys 582#include <../include/petsc/finclude/petscbm.h> 583#include <../ftn/sys/petscbm.h> 584#include <../ftn/sys/petscbm.h90> 585 contains 586 587#include <../ftn/sys/petscbm.hf90> 588 end module 589 590! ------------------------------------------------------------------------ 591 592 module petscmatlab 593 use petscsys 594#include <../include/petsc/finclude/petscmatlab.h> 595#include <../ftn/sys/petscmatlab.h> 596#include <../ftn/sys/petscmatlab.h90> 597 598 contains 599 600#include <../ftn/sys/petscmatlab.hf90> 601 end module 602 603! ------------------------------------------------------------------------ 604 605 module petscdraw 606 use petscsys 607#include <../include/petsc/finclude/petscdraw.h> 608#include <../ftn/sys/petscdraw.h> 609#include <../ftn/sys/petscdraw.h90> 610 611 PetscEnum, parameter :: PETSC_DRAW_BASIC_COLORS = 33 612 PetscEnum, parameter :: PETSC_DRAW_ROTATE = -1 613 PetscEnum, parameter :: PETSC_DRAW_WHITE = 0 614 PetscEnum, parameter :: PETSC_DRAW_BLACK = 1 615 PetscEnum, parameter :: PETSC_DRAW_RED = 2 616 PetscEnum, parameter :: PETSC_DRAW_GREEN = 3 617 PetscEnum, parameter :: PETSC_DRAW_CYAN = 4 618 PetscEnum, parameter :: PETSC_DRAW_BLUE = 5 619 PetscEnum, parameter :: PETSC_DRAW_MAGENTA = 6 620 PetscEnum, parameter :: PETSC_DRAW_AQUAMARINE = 7 621 PetscEnum, parameter :: PETSC_DRAW_FORESTGREEN = 8 622 PetscEnum, parameter :: PETSC_DRAW_ORANGE = 9 623 PetscEnum, parameter :: PETSC_DRAW_VIOLET = 10 624 PetscEnum, parameter :: PETSC_DRAW_BROWN = 11 625 PetscEnum, parameter :: PETSC_DRAW_PINK = 12 626 PetscEnum, parameter :: PETSC_DRAW_CORAL = 13 627 PetscEnum, parameter :: PETSC_DRAW_GRAY = 14 628 PetscEnum, parameter :: PETSC_DRAW_YELLOW = 15 629 PetscEnum, parameter :: PETSC_DRAW_GOLD = 16 630 PetscEnum, parameter :: PETSC_DRAW_LIGHTPINK = 17 631 PetscEnum, parameter :: PETSC_DRAW_MEDIUMTURQUOISE = 18 632 PetscEnum, parameter :: PETSC_DRAW_KHAKI = 19 633 PetscEnum, parameter :: PETSC_DRAW_DIMGRAY = 20 634 PetscEnum, parameter :: PETSC_DRAW_YELLOWGREEN = 21 635 PetscEnum, parameter :: PETSC_DRAW_SKYBLUE = 22 636 PetscEnum, parameter :: PETSC_DRAW_DARKGREEN = 23 637 PetscEnum, parameter :: PETSC_DRAW_NAVYBLUE = 24 638 PetscEnum, parameter :: PETSC_DRAW_SANDYBROWN = 25 639 PetscEnum, parameter :: PETSC_DRAW_CADETBLUE = 26 640 PetscEnum, parameter :: PETSC_DRAW_POWDERBLUE = 27 641 PetscEnum, parameter :: PETSC_DRAW_DEEPPINK = 28 642 PetscEnum, parameter :: PETSC_DRAW_THISTLE = 29 643 PetscEnum, parameter :: PETSC_DRAW_LIMEGREEN = 30 644 PetscEnum, parameter :: PETSC_DRAW_LAVENDERBLUSH = 31 645 PetscEnum, parameter :: PETSC_DRAW_PLUM = 32 646 647 contains 648 649#include <../ftn/sys/petscdraw.hf90> 650 end module 651 652! ------------------------------------------------------------------------ 653 654 subroutine PetscSetCOMM(c1,c2) 655 use, intrinsic :: ISO_C_binding 656 use petscmpi, only: PETSC_COMM_WORLD,PETSC_COMM_SELF 657 658 implicit none 659 MPI_Comm c1,c2 660 661 PETSC_COMM_WORLD = c1 662 PETSC_COMM_SELF = c2 663 end 664 665 subroutine PetscGetCOMM(c1) 666 use, intrinsic :: ISO_C_binding 667 use petscmpi, only: PETSC_COMM_WORLD 668 implicit none 669 MPI_Comm c1 670 671 c1 = PETSC_COMM_WORLD 672 end 673 674 subroutine PetscSetModuleBlock() 675 use, intrinsic :: ISO_C_binding 676 use petscsys!, only: PETSC_NULL_CHARACTER,PETSC_NULL_INTEGER,& 677 ! PETSC_NULL_SCALAR,PETSC_NULL_DOUBLE,PETSC_NULL_REAL,& 678 ! PETSC_NULL_BOOL,PETSC_NULL_FUNCTION,PETSC_NULL_MPI_COMM 679 implicit none 680 681 call PetscSetFortranBasePointers(PETSC_NULL_CHARACTER, & 682 & PETSC_NULL_INTEGER,PETSC_NULL_SCALAR, & 683 & PETSC_NULL_DOUBLE,PETSC_NULL_REAL, & 684 & PETSC_NULL_BOOL,PETSC_NULL_ENUM,PETSC_NULL_FUNCTION, & 685 & PETSC_NULL_MPI_COMM, & 686 & PETSC_NULL_INTEGER_ARRAY,PETSC_NULL_SCALAR_ARRAY, & 687 & PETSC_NULL_REAL_ARRAY, PETSC_NULL_INTEGER_POINTER, & 688 & PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER) 689 end 690 691 subroutine PetscSetModuleBlockMPI(freal,fscalar,fsum,finteger) 692 use, intrinsic :: ISO_C_binding 693 use petscmpi, only: MPIU_REAL,MPIU_SUM,MPIU_SCALAR,MPIU_INTEGER 694 implicit none 695 696 integer4 freal,fscalar,fsum,finteger 697 698 MPIU_REAL = freal 699 MPIU_SCALAR = fscalar 700 MPIU_SUM = fsum 701 MPIU_INTEGER = finteger 702 703 end 704 705 subroutine PetscSetModuleBlockNumeric(pi,maxreal,minreal,eps, & 706 & seps,small,pinf,pninf) 707 use petscsys, only: PETSC_PI,PETSC_MAX_REAL,PETSC_MIN_REAL,& 708 PETSC_MACHINE_EPSILON,PETSC_SQRT_MACHINE_EPSILON,& 709 PETSC_SMALL,PETSC_INFINITY,PETSC_NINFINITY 710 use, intrinsic :: ISO_C_binding 711 implicit none 712 713 PetscReal pi,maxreal,minreal,eps,seps 714 PetscReal small,pinf,pninf 715 716 PETSC_PI = pi 717 PETSC_MAX_REAL = maxreal 718 PETSC_MIN_REAL = minreal 719 PETSC_MACHINE_EPSILON = eps 720 PETSC_SQRT_MACHINE_EPSILON = seps 721 PETSC_SMALL = small 722 PETSC_INFINITY = pinf 723 PETSC_NINFINITY = pninf 724 725 end 726 727