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